php - 在 PHP 中解码没有分号的 HTML 实体

标签 php html character html-entities

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/

相关文章:

php - 如何根据正文 ID 更改链接

Javascript 值比较不合逻辑

java - 防止容器隐藏时java小程序被破坏

java - 使用 Java 方法格式化 HTML 页面上的文本/XML 输出

php - 在为文档编写注释头时,如何指定该函数返回另一个函数?

php - UNION mysql 判断结果来自哪个表

php - 在 Codeigniter 中取消设置 session 数组值

php - 按时间戳分组MYSQL输出空行

c - 以二进制模式写入文件时, '\n' 是如何编码的?

c - 通过输入字符月份和整数年份打印日历