htmlspecialchars() 正在翻译其他特殊字符


htmlspecialchars() is translating other special chars

htmlspecialchars(( 似乎正在翻译如下特殊字符:āķūņūķī 进入各自的实体编号:

ā ķ ū &#

326; ū ķ ī

虽然有些仍未翻译,例如:

日什

我希望htmlspecialchars()(或其他一些功能(不要翻译这些按字母顺序排列的字符......因此,它仅翻译以下内容(如 php.net 手册所示(:

    ">
  1. &"(与号(变为"&">
  2. 设置ENT_NOQUOTES时,"(双引号(变为"。
  3. ">'"(单引号(仅在设置ENT_QUOTES时变为"'"。
  4. "><"(小于(变为"><">
  5. ">"(大于(变为">">

我需要这样做的原因是,在 POST 请求之后,我通过 htmlspecialchars() 运行此用户输入,然后将其放回一组新的 html 输入。&,",",',<,>等字符需要翻译,以免导致显示错误等。但是我需要像">āķūņūķī"这样的特殊字符保持不变。否则用户会非常困惑。

将第三个参数设置为 UTF-8

echo htmlentities('āķūņūķī', ENT_QUOTES, 'UTF-8');

htmlspecialchars的默认编码是 ISO-8859-1

测试用例:

var_dump(htmlentities('āķūņūķī'));
var_dump(htmlentities('āķūņūķī', ENT_QUOTES, 'UTF-8'));

输出:

string(84) "&Auml;�&Auml;&middot;&Aring;&laquo;&Aring;�&Aring;&laquo;&Auml;&middot;&Auml;&laquo;"
string(14) "āķūņūķī"

http://codepad.org/MCaDosQ5

Unicode 值大于 255 的字符需要转换为其数字表示形式,以便正确处理它们。

您提到的两个字符未转换的原因是因为它们具有可以表示为单个字节的 Unicode 值。 值大于 256 的其他字符需要多个字节。

至于接收端的解码,看看htmlspecialchars_decode. 您可以在PHP网站上找到文档 - htmlspecialchars_decode手册页