【问题标题】:Getting unicode values from SVG using DOMDocument使用 DOMDocument 从 SVG 获取 unicode 值
【发布时间】:2013-11-05 17:40:21
【问题描述】:

我正在尝试检索图标字体中字形的 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>

我正在尝试使用DOMDocument 获取属性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');
    }
}

但是,我总是只得到一堆  echo'ed 而不是实际的 unicode 值。我需要使用这个 unicode 值来显示字体系列中的字符并将逐字存储在数据库中。

【问题讨论】:

  • 但那是它回显的实际 unicode 值!您是否想将 unicode 转换为十六进制数字,因为 glyph 属性具有它们?
  • @RobertLongson 是的,我需要实际的十六进制数字。但是,bin2hex 不起作用。它分别返回 20ee9880ee9881 和,它们与字形的 unicode 属性不匹配。 iconv 也无法将 UTF-8 转换为 ASCII。

标签: php unicode svg domdocument icon-fonts


【解决方案1】:

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

iconv 可用于在 UTF-8 和 UTF-16 之间进行转换,因此如果您对结果进行 iconv 处理,然后将其传递到 bin2hex,您应该能够将 UTF-16 值作为字符串获取。

【讨论】:

  • 我觉得这个答案很接近。但是,它仍然没有返回可用的值。 bin2hex(iconv('UTF-8', 'UTF-16', $g-&gt;getAttribute('unicode'))) 返回 fffe2000fffe00e6fffe01e6
  • 知道了! bin2hex(iconv('UTF-8', 'UTF-16BE', $g-&gt;getAttribute('unicode')))。谢谢你。您的第一个链接是一个救生员,也是添加到我的工具箱中的好资源。
猜你喜欢
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2013-05-19
  • 2015-09-28
相关资源
最近更新 更多