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

时间:2012-05-08 01:37:06

标签: php input character-encoding special-characters htmlspecialchars

htmlspecialchars()似乎正在翻译特殊字符,如下所示: āķūņūķī分别加入各自的实体编号:

&安培;#257; &安培;#311; &安培;#363; &安培;#326; &安培;#363; &安培;#311; &安培;#299;

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

ZS

我希望htmlspecialchars()(或其他一些功能)翻译这些按字母顺序排列的字符...这样它只能翻译以下内容(因为它似乎表明了php.net manual):

  1. '& '(&符号)变成'& amp;'
  2. ''(双引号)变为'& quot;'当没有设置ENT_NOQUOTES时。
  3. '”(单引号)变为'''仅在设置了ENT_QUOTES时。
  4. '< '(小于)成为'& lt;'
  5. '> '(大于)成为'& gt;'
  6. 我之所以需要这个,是因为在POST请求之后,我通过htmlspecialchars()运行此用户输入,然后再将其放回到一组新的html输入中。 &,“,”,<,>,等字符需要翻译,以免导致显示错误等。但我需要特殊的字符,例如'āķūņūķī'保持不变。否则用户会非常困惑。

2 个答案:

答案 0 :(得分:5)

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

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

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

测试用例:

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

输出:

string(84) "�ķū�ūķī"
string(14) "āķūņūķī"

http://codepad.org/MCaDosQ5

答案 1 :(得分:0)

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

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

关于接收方的解码,请查看htmlspecialchars_decode。您可以在PHP网站上找到文档 - htmlspecialchars_decode manual page