我有这样的xml:
<formula type="inline">
<default:math xmlns="http://www.w3.org/1998/Math/MathML">
<default:mi>
ℤ
</default:mi>
</default:math>
</formula>
我的目标是通过用数字实体表示替换它们来摆脱所有特殊实体,例如ℤ
。
我试过了:
$test = <content of the xml>;
$convmap = array(0x80, 0xffff, 0, 0xffff);
$test = mb_encode_numericentity($test, $convmap, 'UTF-8');
但这不会取代ℤ
知道吗?
我的目标是获得:
ℤ
如图所示:http://www.fileformat.info/info/unicode/char/2124/index.htm
谢谢。
您的转换器正在将您的 LaTeX 转换为 MathML,而不是 HTML 实体。你需要一些直接转换为HTML字符引用的东西,或者一个MathML到HTML字符引用转换器。
您应该能够使用htmlentities
:
htmlentities($symbolsToEncode, ENT_XML1, 'UTF-8');
http://pt1.php.net/htmlentities
您可以将ENT_XML1
更改为ENT_SUBSTITUTE
,它将返回 Unicode 替换字符或十六进制字符引用。
作为替代方法,您可以使用strtr
将字符转换为您指定的字符:
$chars = array(
"'x8484" => "蒄"
...
);
$convertedXML = strtr($xml, $chars);
http://php.net/strtr
有人在GitHub上做了类似的事情。
因此,您需要先解码命名实体:
function decodeNamedEntities($string) {
static $entities = NULL;
if (NULL === $entities) {
$entities = array_flip(
array_diff(
get_html_translation_table(HTML_ENTITIES, ENT_COMPAT | ENT_HTML5, 'UTF-8'),
get_html_translation_table(HTML_ENTITIES, ENT_COMPAT | ENT_XML1, 'UTF-8')
)
);
}
return str_replace(array_keys($entities), $entities, $string);
}
之后,如果确实需要,您可以使用htmlentities
以不同的格式对它们进行编码。