如何使用JavaScript安全地对URL进行编码,以便将其放入GET字符串?
这是我在jQuery中所做的:
var url = "mynewpage.aspx?id=1234";
$(location).attr('href', url);
Run Code Online (Sandbox Code Playgroud)
在ASP.NET page_load中,我正在读这个:
_string _id = Request.QueryString["id"].ToString();
Run Code Online (Sandbox Code Playgroud)
如何在jQuery/JavaScript中编码id并在ASP.NET(C#)中解码?
我需要对 URL 组件进行编码。URL组件可以包含“?、#、=”等特殊字符,也可以包含中文字符。
我应该使用哪种字符集:UTF-8、UTF-16 还是 UTF-32?为什么?
我使用 encodeURI() 对 php 请求 url 进行编码,它在 Firefox 和 Chrome 中工作得很好,但在 IE/Edge 中却没有。
实际网址是:
http://localhost/get.php?id=e_e2&title=e2&desc=just a note&stime=6/12/2015, 1:00:00 AM&etime=15/12/2015, 1:00:00 PM
Firefox 返回的是(有效):
http://localhost/get.php?id=e_HO%20Event%201&title=HO%20Event%201&desc=This%20is%20just%20a%20test%20event%20of%20this%20handover%20only&stime=6/12/2015,%201:00:00%20AM&etime=10/12/2015,%201:00:00%20PM
IE 返回什么(破坏 php 代码):
http://localhost/get.php?id=e_HO%20Event%201&title=HO%20Event%201&desc=This%20is%20just%20a%20test%20event%20of%20this%20handover%20only&stime=%E2%80%8E6%E2%80%8E/%E2%80%8E12%E2%80%8E/%E2%80%8E2015%E2%80%8E%20%E2%80%8E1%E2%80%8E:%E2%80%8E00%E2%80%8E:%E2%80%8E00%E2%80%8E%20%E2%80%8EAM&etime=%E2%80%8E10%E2%80%8E/%E2%80%8E12%E2%80%8E/%E2%80%8E2015%E2%80%8E%20%E2%80%8E1%E2%80%8E:%E2%80%8E00%E2%80%8E:%E2%80%8E00%E2%80%8E%20%E2%80%8EPM
我试图解码 IE 返回的内容,但它给我带来了很多问题!,那么有没有 encodeURI() 的替代方法?,即使我不对 url 进行编码,FF 似乎也可以工作,如果我复制 FF 编码,IE 可以工作网址吧!
更新:示例代码 链接
我认为它与 toLocaleString() 有关
最终更新:
由于很少有人回答,链接中的一些磨损标记“仅在 IE 中出现!” 我必须过滤并更改我的 php 脚本日期格式以删除逗号
function FixLocaleDateString(localeDate) {
var newStr = "";
for (var i = 0; i < localeDate.length; i++) {
var code = localeDate.charCodeAt(i);
if (code != 44 && code != …Run Code Online (Sandbox Code Playgroud) 我想关闭 Jersey 请求或某些参数的 URL 编码。
我正在与之交谈的服务器需要以下格式 example.com/path?query=foo:bar
使用 Jackson WebTarget,
final WebTarget target = ClientBuilder.newClient()
.target(url)
.queryParam("query", "{queryVal}")
.resolveTemplate("queryVal", "foo:bar");
Run Code Online (Sandbox Code Playgroud)
可悲的是,这会产生example.com/path?query=foo bar服务器不接受的结果。
我为此搜索了很多,唯一有希望的途径似乎与 有关javax.ws.rs.core.Configuration,但我还没有深入了解。
如果我们在 Asp.Net Core 中有这样的控制器端点:
[HttpGet("/api/resources/{someParam}")]
public async Task<ActionResult> TestEndpoint([FromRoute] string someParam)
{
string someParamUrlDecoded = HttpUtility.UrlDecode(someParam);
// do stuff with url decoded param...
}
Run Code Online (Sandbox Code Playgroud)
是否有某种方法可以配置[FromRoute]解析行为,使其注入someParam已解码的 url 值?
对于带有路径参数的给定路线(下面的示例)
router.GET("/employee/:id", empHandler.GetEmployee)
Run Code Online (Sandbox Code Playgroud)
当尝试使用包含正斜杠的 id path-param(encoded) 调用 url 时
ID = 21/管理员/527
url 编码 ID = 21%2Fadmin%2F527
https://localhost:8000/emplayee/21%2Fadmin%2F527
Run Code Online (Sandbox Code Playgroud)
当我尝试点击此请求时,我收到 404 似乎 gin 会自动解码路径参数并形成一条包含解码路径参数的 url 的路由
https://localhost:8000/emplayee/21/admin/527
Run Code Online (Sandbox Code Playgroud)
我想要员工 ID 路径参数的确切编码值,因为它用于调用需要对其进行 url 编码的其他 api。
我正在尝试将字符串编码为安全URL以用于通用目的,并且在使用CodeIgniter时rawurlencode()和urlencode()都不起作用.我已经使用过它们,并且使用直接的PHP可以很好地工作,但无论出于何种原因,它都不起作用.我无法找到任何其他有此问题的人,因此没有解决方案.
码:
<a href="/search/degree/<?=rawurlencode($row->degree)?>" class="element_link"><?=$row->degree?></a>
Run Code Online (Sandbox Code Playgroud)
它只是作为纯文本传递,空格未转义和一切.
我期待着我能够得到的结果:
<?php echo rawurlencode('http://kchason.com'); ?>
Run Code Online (Sandbox Code Playgroud)
优点:http%3A%2F%2Fkchason.com
但:
<a href="/search/degree/<?=rawurlencode($row->degree)?>" class="element_link"><?=$row->degree?></a>
给我举个例子:'localhost/http://kchason.com',这显然是不安全的,不起作用.
我一直在使用$ _get编码的URL变量进行URL解码.
我面临的当前问题是我有一个像这样编码的URL:
blah.php?url=http%3A%2F%2Fm.youtube.com%2F#/watch?feature=player_embedded&v=zd7c5tQCs1I&desktop_uri=%2Fwatch%3Fv%3Dzd7c5tQCs1I%26feature%3Dplayer_embedded
我不确定这是什么样的编码,有人可以帮助我吗?当我在这上面只使用"urldecode"它就会返回m.youtube.com
编辑:我的问题不是url解码不工作,如果我手动输入这个编码的URL并使用urldecode(),但是当这个编码的url在实际的页面url并且我使用_GET函数然后我尝试解码它,它会在URL中的"#"之后对所有内容进行条带化处理.
<?php print urldecode($_GET["url"]);?>
它回来了
"http://m.youtube.com/"
代替
"http://m.youtube.com/#/watch?feature=player_embedded&v=zd7c5tQCs1I&desktop_uri=/watch?v=zd7c5tQCs1I&feature=player_embedded"
我认为问题是英镑符号没有编码,如果我刷新页面它会剥掉磅唱歌及其后的所有内容,那么我该如何解决这个问题呢?即使有一个英镑符号,我还可以从"GET"中检索信息吗?(#)
将此URL输入浏览器时: http://www.google.com/?q=ä
发送的网址实际上是 http://www.google.com/?q=%C3%A4
我想用Php进行相同的转换 - 如何做到这一点?
我尝试了什么:
$url = 'http://www.google.com/?q=ä'; //utf8 encoded
echo rawurlencode($url);
//gives http%3A%2F%2Fwww.google.com%2F%3Fq%3D%C3%A4
$u = parse_url($url);
echo $url['scheme'].'://'.$url['host'].$url['path'].'?'.rawurlencode($url['query']);
//gives http://www.google.com/?q%3D%C3%A4
Run Code Online (Sandbox Code Playgroud)
上面的url只是一个简单的例子,我需要一个也适用的通用解决方案
http://www.example.com/ä
http://www.example.com/ä?foo=ä&bar=ö
http://www.example.com/???????????abc=??????????
Run Code Online (Sandbox Code Playgroud)
这里提供的答案不够通用: 如何使用像浏览器这样的PHP编码URL
我试图从http://freemusicarchive.org下载一首曲目.一般来说,您可以通过附加/下载到轨道URL来下载文件,轨道URL通过重定向到S3上的资产进行响应.
例如,试试这个链接:http: //freemusicarchive.org//music//Zola_Jesus//Live_at_WFMU_on_Scott_McDowells_Show_1709//Odessa/download
要查看重定向,请将链接放在此处:http: //www.wheregoes.com/retracer.php
我可以使用如下代码获取重定向位置:
req, err := http.NewRequest("GET", url, nil)
errHndlr(err)
transport := http.Transport{}
resp, err := transport.RoundTrip(req)
defer resp.Body.Close()
errHndlr(err)
redirect := resp.Header.Get("Location")
Run Code Online (Sandbox Code Playgroud)
我已通过将重定向链接打印到控制台并将其复制/粘贴到我的浏览器中来验证重定向链接,但是当我在同一个URL上调用http.Get时,我从AWS收到"SignatureDoesNotMatch"错误.
如果有人能够提供有关此处出现问题的见解,我将非常感激.