PHP html特殊字符不是编码实体而是编码

时间:2012-03-15 09:36:48

标签: php encoding decimal html-entities

我无法找到解决以下问题的方法:

当我通过htmlentities()运行它们时,网站上有很多特殊字符;

您将所有特殊字符转换为HTML实体:

£ => £
" => "
 => Â
....

但我真正需要的是该编码的十进制版本:

£ => £
" => "
 of(Â) => À
  =>  

是否存在可以解决此问题的功能,而无需使用替换手动执行此操作?

2 个答案:

答案 0 :(得分:2)

如下所示?

function htmlnumericentities($str){ 
  return preg_replace('/[^!-%\x27-;=?-~ ]/e', '"&#".ord("$0").chr(59)', $str); 
} 

function numericentitieshtml($str){ 
  return utf8_encode(preg_replace('/&#(\d+);/e', 'chr(str_replace(";","",str_replace("&#","","$0")))', $str)); 
} 

echo (htmlnumericentities ("Ceci est un test : & é $ à ç <")); 
echo ("<br/>\n"); 
echo (numericentitieshtml (htmlnumericentities ("Ceci est un test : & é $ à ç <"))); 

答案 1 :(得分:0)

在接受的答案示例以及有关“ e”标志的弃用警告的相关注释之后,这是一个更新的多字节兼容函数,以十进制表示法将字符串特殊字符编码为其HTML实体:

function htmlnumericentities($string) {
    return mb_ereg_replace_callback('[^!-%\x27-;=?-~ ]', function($matches) {
        return '&#'.mb_ord($matches[0]).';';
    }, $string);
}

您当然需要MB String。

例如Dès 67,57 €将转换为D&#232;s 67,57&#160;&#8364;