PHP rawurlencode不等于JavaScript转义!为什么?

时间:2011-02-03 14:54:04

标签: php javascript escaping urlencode

我意识到当我在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有人帮忙吗?

2 个答案:

答案 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 希望它有所帮助。