4

出于某种原因,在将这样的字符串Jack’s Spindle从文本表单提交到 php 后,我得到:

Jack%u2019s Spindle

不是PHPurlencode()会做的,这将是Jack%92s+Spindle or rawurlencode()=Jack%92s%20Spindle

因此,urldecode()原始版本无法解码该字符串...此类字符串还有其他功能吗?

--

此外,Jack’s Spindle这将是对上述内容进行编码的 HTML 安全方式,但urlencode()raw* 会产生:Jack%26%238217%3Bs+SpindleJack%26%238217%3Bs%20Spindle分别...

从哪里来%u2019?它代表什么?你如何让它回到那个无害的撇号?

4

3 回答 3

7

好吧,只有你能告诉我们它是从哪里来的。你是从哪里得到你的文本的,它被提交到哪些转换?我承认我还没有看到这种编码策略。

也就是说,它与 Javascript 编码 UTF-16 代码单元的方式非常相似:\uXXXX每个代码单元X代表一个十六进制字符。要将其转换为 HTML 实体,您可以执行以下操作:

preg_replace('/%u([a-fA-F0-9]{4})/', '&#x\\1;', $string)
于 2010-08-03T02:21:31.067 回答
3

函数调用中的正则表达式preg_replace应该有一个结束分隔符,即:preg_replace('/%u([a-fA-F0-9]{4})/', '&#x\\1;', $string)

于 2011-09-05T12:10:52.723 回答
1

我有这种问题。
当我通过 javascript/ajax 将变量发送到 php 脚本时,php 显示的是 %u2019 而不是引号等...
我这样解决了:
- 在我的 javascript 脚本中,在发送之前替换escape(myvar)为 - 在我的 php 文件中,使用encodeURIComponent(myvar)
$myvar=utf8_decode($_POST['myvar'])

希望能帮上忙。

于 2012-11-05T17:13:45.047 回答