我意识到当我在PHP中使用urlencode或rawurlencode编码简单字符§(段落)时,我得到以下结果:“%C2%A7”。
但是当我在Javascript中使用escape来编码该字符时,我只得到“%A7”。
在这种情况下,我在运行PHP的服务器和尝试通过ajax / jquery获取数据的javascript客户端之间发送/接收数据时遇到编码问题。
我希望能够写出我想要的任何类型的文字。为此我编码文本并将其发送到后端PHP脚本,转发数据和发送。当我检索它时,在php端我从mysql获取数据并执行rawurlencode并将其发回。
双方均以UTF-8模式工作。 jquery ajax函数用"contentType: application/x-www-form-urlencoded:charset=UTF-8"
调用,mysql服务器为UTF-8设置,用于客户端和服务器,php脚本开始用header( "application/x-www-form-urlencoded:charset=UTF-8");
回显
为什么PHP会生成%C2的东西,它会在javascript端生成字符。
Coult有人帮忙吗?
答案 0 :(得分:3)
这显然是一个charsetíssue:
[adrian@cheops3:~]> php -r 'echo rawurlencode(utf8_encode("§"));'
%C2%A7
[adrian@cheops3:~]> php -r 'echo rawurlencode("§");'
%A7
(终端显然没有在utf8模式下运行)
如果您的PHP代码中有文字§
,请确保 php文件保存为UTF8。
答案 1 :(得分:3)
前一段时间我遇到了同样的问题并找到了解决方案:
function rawurlencode (str) {
str = (str+'').toString();
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
replace(/\)/g, '%29').replace(/\*/g, '%2A');
}
代码来自此处 - http://phpjs.org/functions/rawurlencode:501 希望它有所帮助。