这是什么编码...你怎么逃脱它在PHP?

时间:2009-10-16 07:51:30

标签: php html encoding html-entities

我正在研究一个站点的imdb数据抓取器,我似乎用一种我以前从未见过的奇怪编码来编码所有内容。

<a href="/keyword/exploding-ship/">Exploding&#xA0;Ship</a>
A Bug&#x27;s Life

是否有将这些转换为常规字符的php函数?

2 个答案:

答案 0 :(得分:5)

这不是编码,它是html实体的十六进制代码。

$converted = html_entity_decode($string, ENT_QUOTES, 'UTF-8');

答案 1 :(得分:1)

这些是SGML角色转义。它们可以是十进制(&#39;)或十六进制(&#xA0),并直接引用Unicode代码点。

html_entity_decode()应该在PHP 5中运行。虽然我现在无法测试。

在该参考页面的第一条评论中,为旧的PHP版本提供了以下代码:

// For users prior to PHP 4.3.0 you may do this:
function unhtmlentities($string)
{
    // replace numeric entities
    $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
    $string = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $string);
    // replace literal entities
    $trans_tbl = get_html_translation_table(HTML_ENTITIES);
    $trans_tbl = array_flip($trans_tbl);
    return strtr($string, $trans_tbl);
}