使用ajax的get方法传递变量,需要使用escape()函数对字符串进行转义。
在php中,我接收这个值并将其插入到数据库中。
如何取消转义字符串?
例如:
balaji's
我明白了
balaji%27s.
使用ajax的get方法传递变量,需要使用escape()函数对字符串进行转义。
在php中,我接收这个值并将其插入到数据库中。
如何取消转义字符串?
例如:
balaji's
我明白了
balaji%27s.
htmlspecialchars(urldecode($str));
function utf8_urldecode($str) {
return html_entity_decode(preg_replace("/%u([0-9a-f]{3,4})/i", "&#x\\1;", urldecode($str)), null, 'UTF-8');
}
html_entity_decode($str, null, 'UTF-8')
可以解码像 "ã" 这样转义的字符是很有用的。我在这里写下来,这样其他人如果遇到和我一样的问题就更容易看到了。 - VinGarcia不要在客户端使用 escape
,而应该使用 encodeURIComponent
。 escape
不进行URI编码。(它执行类似的操作,但有足够的不同之处,可能会给你带来麻烦。)encodeURIComponent
执行标准的URI编码。如果您以正常方式发送数据,则PHP应自动对其进行解码,例如:
var word = "balaji's";
$.ajax({
url: "yoururl",
data: encodeURIComponent("word") + "=" + encodeURIComponent(word)
});
如果你不是以默认的"multipart form"表单方式发送数据(例如,你正在覆盖dataType
),那么你需要通过urldecode
进行手动解码。
urldecode()
还是rawurldecode()
,都不能完全解码已经使用escape()
转义的数据。一般的共识是应该使用encodeURIComponent()
代替。 - Pekkaescape()
,它会生成像%u0710
这样的字符串,而urldecode()
无法解码。在这里更改编码方法确实是正确的做法。 - Pekka作为最后的手段,你可以尝试像这样做(此列表不是详尽无遗的,请自行补充)
$search = ["%20",'%3C','%3E','%3D','%22','%3A','%3B','%E0','%E9','%E8','%26','%E2', '%u2019'];
$replace = [' ', '<', '>', '=','"',':',';','à','é','è','&','â', '\''];
str_replace($search, $replace, $your_str);