PHP如何将文本编码为数字实体?

Mil*_*loš 5 php xml encoding dom domdocument

我有这样的xml:

<formula type="inline">
    <default:math xmlns="http://www.w3.org/1998/Math/MathML">
        <default:mi>
            &Zopf;
        </default:mi>
    </default:math>
</formula>
Run Code Online (Sandbox Code Playgroud)

我的目标是摆脱所有特殊实体,例如&Zopf;通过数字实体演示替换它们.

我试过了 :

$test    = <content of the xml>;
$convmap = array(0x80, 0xffff, 0, 0xffff);
$test    = mb_encode_numericentity($test, $convmap, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

但这不会取代&Zopf;Any的想法吗?

我的目标是获得:

&#8484; 
Run Code Online (Sandbox Code Playgroud)

如下所示:http://www.fileformat.info/info/unicode/char/2124/index.htm

谢谢.

Ale*_*x W 3

您的转换器正在将 LaTeX 转换为 MathML,而不是 HTML 实体。您需要能够直接转换为 HTML 字符引用的工具,或者MathML 到 HTML 字符引用转换器

您应该能够使用htmlentities

htmlentities($symbolsToEncode, ENT_XML1, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

http://pt1.php.net/htmlentities

您可以更改ENT_XML1ENT_SUBSTITUTE,它将返回 Unicode 替换字符或十六进制字符引用。

作为替代方案,您可以使用strtr将字符转换为您指定的内容:

$chars = array(
    "\x8484" => "&#x8484;"
    ...
);

$convertedXML = strtr($xml, $chars);
Run Code Online (Sandbox Code Playgroud)

http://php.net/strtr

有人在 GitHub 上做了类似的事情