出于某种原因,在从文本表单提交类似Jack’s Spindle
的字符串到php后,我得到:
Jack%u2019s Spindle
这是不 PHP的urlencode()
会做什么,这将是Jack%92s+Spindle
或rawurlencode()
= Jack%92s%20Spindle
因此,urldecode()
和原始版本无法解码该字符串...是否有其他函数用于此类字符串?
-
此外,Jack’s Spindle
将是对上述进行编码的HTML安全方式,但urlencode()
和raw *分别为:Jack%26%238217%3Bs+Spindle
和Jack%26%238217%3Bs%20Spindle
...
%u2019
来自哪里?它代表什么?你怎么回到那个无辜的撇号?
答案 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'])