Php 使用DOMDocument从SVG获取unicode值

Php 使用DOMDocument从SVG获取unicode值,php,unicode,svg,domdocument,icon-fonts,Php,Unicode,Svg,Domdocument,Icon Fonts,我试图检索图标字体中字形的unicode值。字体的结构如下所示: <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > <svg xmlns="http://www.w3.org/2000/svg"> <defs> <fon

我试图检索图标字体中字形的unicode值。字体的结构如下所示:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<font id="symbols" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
<glyph unicode="&#xe600;" d="M1004.5 404.5q-19.5-19.5-47-19.5t-46.5 19l-15 15v-419q0-26-18.5-45t-45.5-19h-192v288q0 13-9.5 22.5t-22.5 9.5h-192q-13 0-22.5-9.5t-9.5-22.5v-288h-192q-27 0-45.5 19t-18.5 45v419l-15-15q-19-19-46.5-19t-47 19.5-19.5 47 19 46.5l444 444q20 20 49 19 29 1 49-19l444-444q19-19 19-46.5t-19.5-47z" />
<glyph unicode="&#xe601;" d="M960 576h-384v-64h258q34-1 43-10l137-94q10-10 10-24t-10-24l-137-94q-10-10-45-10h-256v-256q0-26-18.5-45t-45.5-19-45.5 19-18.5 45v256h-384q-26 0-45 19t-19 45v128q0 26 19 45t45 19h384v64h-256q-35 0-45 10l-137 94q-10 10-10 24t10 24l137 94q9 10 43 10h258v64q0 26 18.5 45t45.5 19 45.5-19 18.5-45v-64h384q26 0 45-18.5t19-45.5v-128q0-27-19-45.5t-45-18.5z" />
</font>
</defs>
</svg>
然而,我总是得到一堆 <代码>回显“而不是实际的unicode值。我需要使用此unicode值来显示字体系列中的字符,并在数据库中逐字存储。

您得到的是。这是属性的UTF-8十六进制值。您似乎期望的是UTF16值,但它只是以不同的方式表示的同一事物


可用于在UTF-8和UTF-16之间转换,因此,如果您输入结果,然后将其传递到bin2hex,您应该能够以字符串形式获取UTF-16值。

但这是它所回显的实际unicode值!是否要将unicode转换为十六进制数字,因为glyph属性将其设置为?@RobertLongson是的,我需要实际的十六进制数字。但是,
bin2hex
不起作用。它分别返回
20
ee9880
ee9881
和,这与glyph的unicode属性不匹配
iconv
也无法将UTF-8转换为ASCII。我觉得这个答案很接近。但是,它仍然不会返回可用值
bin2hex(iconv('UTF-8','UTF-16',$g->getAttribute('unicode'))
返回
fffe2000
fffe00e6
,和
fffe01e6
。明白了<代码>二进制十六进制(iconv('UTF-8','UTF-16BE',$g->getAttribute('unicode'))。非常感谢。你的第一个链接是一个救生圈,也是一个很好的资源,可以添加到我的工具箱中。
if(file_exists($this->symbols)) {
    $font = new DOMDocument();
    $font->load($this->symbols);
    $glyphs = $font->getElementsByTagName('glyph');

    foreach($glyphs as $g) {
        echo $g->getAttribute('unicode');
    }
}