【问题标题】:PHP's rawurlencode is not equal to JavaScripts escape! Why?PHP rawurlencode 不等于 JavaScript 转义!为什么?
【发布时间】:2011-02-03 14:54:04
【问题描述】:

我意识到当我在 PHP 中使用 urlencode 或 rawurlencode 编码简单字符 §(段落)时,我得到以下结果:“%C2%A7”。

但是当我在 Javascript 中使用转义来编码该字符时,我只得到“%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 端生成字符 Â。

有人帮忙吗?

【问题讨论】:

标签: php javascript escaping urlencode


【解决方案1】:

我前段时间遇到了同样的问题,找到了解决方案:

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 希望对您有所帮助。

【讨论】:

  • 感谢您提供的信息。但这是针对 javascript 方面的。 javascript 方面看起来不错,因为数据已正确存储在我的 mysql 数据库中。从我的 php 端检索它是问题所在。所以我需要 PHP 中的一些东西来获得正确的 § 编码
  • 啊废话,刚刚明白了。我必须使用 encodeURIComponent 和 decodeURIComponent。然后编码和解码在 javascript 和 php 之间工作正常。您的 rawurlencode 是正确的,谢谢 Radoslav。
【解决方案2】:

这显然是一个字符集问题:

[adrian@cheops3:~]> php -r 'echo rawurlencode(utf8_encode("§"));'
%C2%A7
[adrian@cheops3:~]> php -r 'echo rawurlencode("§");'
%A7

(终端显然没有运行在utf8模式)

如果您的 PHP 代码中有文字 §,请确保 php 文件 保存为 UTF8。

【讨论】:

  • 有趣。所以在你的情况下 rawurlencode("§");仅返回 %A7。但在我的情况下,我得到 %C2%A7。你认为这是来自我的 php 文件编码。如何检查文件编码?事情甚至在我的终端中,我得到了 %C2%A7。那么我的终端不是utf8吗?我怎么能确定它是纯 utf8。我的终端编码设置为 utf-8。
  • 嗯好吧,我这样做了: php -r 'echo rawurlencode(utf8_decode("§"));'它只返回 %A7。这是什么意思?
  • 如果你得到 %C2%A7 它是 UTF8;如果不是,您将获得 %A7。如果您使用的是 vim,您可以使用 :set fenc=utf8(或 latin1) 设置文件编码
猜你喜欢
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2019-10-25
  • 2017-05-31
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多