0

PHP関数の戻り型として文字のUnicodeを出力しようとしていますが、実際に関数を呼び出すと、シンボルではなく「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;
}
4

2 に答える 2

2

PHPに関する限り、値0x27140x2718は単に16進数であり、それぞれjust2714ととして格納され2718ます。実際には、PHPはそれらを10進値に変換する必要があります。HTMLに出力される場合、それらはまさにその数字として出力されます。

それらをHTMLで出力し、実際の記号を表示したい場合は、それらを前に&#x付けて、;:を付けてみてください。

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

それらが10進値に変換されている場合は、&#の代わりにそれらを前に付けることができます&#x。追加さxれたのは16進値用です。

于 2012-08-27T14:12:44.340 に答える
0

参照:ユニコード値を持つphp chr

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;
}
于 2012-08-27T14:20:05.680 に答える