通过使用PHP函数输出unicode来显示unicode符号

时间:2012-08-27 14:05:48

标签: php html unicode

我正在尝试输出字符的unicode作为我的PHP函数的返回类型,但是当我在实践中调用该函数时,它只输出没有“0x”而不是符号的代码。但是,如果我在HTML中明确声明了unicode,它会输出符号。下面是我的代码的简化版本。为什么会这样?

在显示表格的PHP文件中:

<td><?php echo verifyMatch($a,$b) ?></td>

在我的另一个文件中的函数:

function verifyMatch($_a,$_b){
  $_output = null;
  if (checkCondition()){
    $_output = 0x2714;
    // unicode for tick
  } else {
    $_output = 0x2718;
    // unicode for cross
  }
  return $_output;
}

2 个答案:

答案 0 :(得分:2)

就PHP而言,您的值0x27140x2718只是十六进制数字,它们分别仅存储为27142718。实际上,PHP应该将它们转换为十进制值。输出到HTML时,它们只是输出 - 数字。

如果您想要以HTML格式输出并显示实际符号,请尝试使用&#x对其进行预先处理,然后使用;附加它们:

<td><?php echo '&#x' . verifyMatch($a, $b) . ';'; ?></td>

如果将它们转换为十进制值,则可以仅使用&#而不是&#x作为前缀。添加的x用于十六进制值。

答案 1 :(得分:0)

参考:php chr with unicode values

function replace_unicode_escape_sequence($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
function unicode_chr ($chr) {
    $str = "\u".end(explode("+", $chr));
    return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $str);
}

function verifyMatch($_a,$_b){
    $_output = null;
    if (checkCondition()){
       $_output = unicode_chr("U+2714");   // unicode for tick
    }
    else {
        $_output = unicode_chr("U+2718");   // unicode for cross
    }
    return $_output;
}