背景:我有一个使用 tinymce 编辑 HTML 的网站。HTML 实体,如不间断空格和 &x22C4; 即使我使用的是 entity_encoding:"named" 选项,tinymce 也会将其转换为 UTF-8 字符。然后我将它存储在一个 UTF-8 的 MySQL 表中。当稍后检索相同的 HTML 以进行重新编辑时,多字节字符将由 tinymce 分隔为单个字符。Tinymce 已验证这是一个错误。
问题是:如何在不破坏 HTML 的情况下将所有多字节 UTF-8 字符转换为 HTML 实体?
我在 PHP 中尝试了以下内容,但刚刚删除了多字节 UTF-8 字符:
$encoded_string = htmlentities( $utf_string, ENT_HTML5, 'UTF-8', false );
$html_ent_conv = htmlspecialchars_decode ( $encoded_string , ENT_COMPAT | ENT_HTML5 );
我也尝试了 mb_encode_numericentity,但我不知道应该为 convmap 参数使用什么。
更新:我有 PHP 5.3.17,它不支持 ENT_HTML5,所以我删除了它。现在它适用于不间断空间,但不适用于其他多字节 UTF-8 字符。