PHP URL编码/解码表单字段的%u2019中的漂亮报价

时间:2010-08-03 02:00:58

标签: php forms encoding quotes decoding

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

Jack%u2019s Spindle

这是 PHP的urlencode()会做什么,这将是Jack%92s+Spindlerawurlencode() = Jack%92s%20Spindle

因此,urldecode()和原始版本无法解码该字符串...是否有其他函数用于此类字符串?

-

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

%u2019来自哪里?它代表什么?你怎么回到那个无辜的撇号?

3 个答案:

答案 0 :(得分:6)

嗯,只有你可以告诉我们它来自哪里。从中获取文本以及提交哪些转换?我承认我还没有看到编码策略。

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

preg_replace('/%u([a-fA-F0-9]{4})/', '&#x\\1;', $string)

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

希望能有所帮助。