在我的JS中,我使用jQuery ajax函数。
这是它的样子:
$.ajax({
url: "somepage/" + keyword + "/" + xyz + "/" + abc + "/getbla",
(...)
如果'keyword'(= textfield的值)包含'#',则此功能不再起作用。我们都知道,URL只会被解析,直到#和#后面的其余部分将用于锚点。
所以我将ajax函数修改为:
$.ajax({
url: "somepage/" + encodeURIComponent(keyword) + "/" + xyz + "/" + abc + "/getbla",
(...)
这也不起作用,但在控制台中我可以看到带有%23而不是#的完整网址。
好的,这与我想要的很接近,但请求仍然无效 - 我不知道为什么 - 这就是我在这里问的原因。
我在textfield(= keyword)中输入了%23,请求完全正常。 我的php后端正在发送我正在寻找的数据。
所以这是我的最终解决方案:
$.ajax({
url: "somepage/" + encodeURIComponent(encodeURIComponent(keyword)) + "/" + xyz + "/" + abc + "/getbla",
(...)
这就是PHP函数的样子:
if ($_GET['anyparam'] == 'getbla') {
$searchString = array(
'keyword' => trim($_POST['keyword']),
'xyz' => trim($_POST['xyz']),
'abc' => trim($_POST['abc'])
);
echo json_encode($this->dataBaseFunctions->searchResult($searchString['keyword'], $searchString['xyz'], $searchString['abc']));
}
问题:为什么我必须对网址进行双重编码?
答案 0 :(得分:2)
我的猜测是你的使用url重写,所以初始请求通过并且#
被解码,并且在散列哈希之后重定向所有内容。
对于双重编码,第一个请求将解码为%23
重定向到#
如果您正在使用mod_rewrite,请查看https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_b
答案 1 :(得分:0)
我认为这条规则正是我所寻求的:
RewriteRule ^somepage/([^/]+)/([0-9]+)/?$ somepage¶m1=${unesc:$1}¶m2=$2 [L]
答案 2 :(得分:-1)
as per this你输入的网址没有使用encodeURIComponent实际上很好,你只是编码正确的网址,这使得它不正确,所以你必须应用2次才能使它从正确 - >>正确─>正确