我正在用PHP编写一些RSS提要并且在处理字符编码问题.我应该在htmlentities()编码之前或之后使用utf8_encode()吗?例如,我在描述元素中有两个&符号和中文字符,我不确定哪个是正确的:
$output = utf8_encode(htmlentities($source)); or $output = htmlentities(utf8_encode($source));
为什么?
将字符集传递给htmlentities函数非常重要,因为默认值为ISO-8859-1:
utf8_encode(htmlentities($source,ENT_COMPAT,'utf-8'));
您应首先应用htmlentities以允许utf8_encode正确编码实体.
(编辑:我之前的意见改变了,根据评论,订单无关紧要.这段代码经过测试并且效果很好).
第一:该utf8_encode
功能从ISO 8859-1转换为UTF-8.因此,如果输入编码/字符集是ISO 8859-1,则只需要此功能.但是你为什么不首先使用UTF-8?
第二:你不需要htmlentities
.您只需要htmlspecialchars
通过字符引用替换特殊字符.htmlentities
将替换可以使用UTF-8直接编码的"太多"字符.重要的是,您也可以使用ENT_QUOTES
引用样式替换单引号.
所以我的提议:
// if your input encoding is ISO 8859-1 htmlspecialchars(utf8_encode($string), ENT_QUOTES) // if your input encoding is UTF-8 htmlspecialchars($string, ENT_QUOTES, 'UTF-8')
不要用htmlentities()
!
只需使用UTF-8字符.只需确保在HTTP标头(Content-Type:application/xml;charset=UTF-8
)中声明Feed的编码或在第一行使用Feed本身时失败.