HTML 的现代方言和良好实践规则不允许省略 HTML 实体中的分号 (&likethat;
)。但是我有一个任务来解析任意页面并且必须处理没有分号的错误 html 实体。这是浏览器完美呈现的。我如何使用 PHP 将没有分号的 HTML 实体解码为它们各自的 UTF-8 等效项?
最佳答案
您可以获得所有 html 实体的列表,并使用它用它们的 UTF-8 表示替换所有不带分号的实体:
// get all HTML entities
$mapping = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES | ENT_HTML5, 'UTF-8');
// change array values representing the entities to regex pattern with negativ lookahead for semicolon
array_walk($mapping, function(&$value) { $value = '/'.rtrim($value, ';').'(?!;)/'; });
// replace all entities without semicolon by their utf8 representation
$html = preg_replace(array_values($mapping), array_keys($mapping), $html);
关于php - 在 PHP 中解码没有分号的 HTML 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23194437/