1

htmlspecialchars() 似乎正在将特殊字符翻译如下: āķūņūķī到它们各自的实体编号:

ā ķ ū ņ ū ķ ī

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

我希望htmlspecialchars()(或其他一些功能)翻译这些字母类型的字符......所以它只翻译以下内容(正如它似乎在php.net 手册上指出的那样):

  1. ' & '(和号)变为'&'
  2. ' " ' (双引号) 变成 '"' 当 ENT_NOQUOTES 未设置时。
  3. " ' " (单引号) 变成 ''' 仅当设置了 ENT_QUOTES 时。
  4. ' < '(小于)变为'<'
  5. ' > '(大于)变成'>'

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

4

2 回答 2

5

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

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

的默认编码htmlspecialcharsISO-8859-1.

测试用例:

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

输出:

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

http://codepad.org/MCaDosQ5

于 2012-05-08T01:48:10.293 回答
0

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

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

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

于 2012-05-08T01:43:46.093 回答