17

ord() を使用して、javascript の charCodeAt() 関数と同じ値を取得できるようにする必要があります。問題は、ord() が UTF8 をサポートしていないことです。

PHPでĄを260に変換するにはどうすればよいですか? 私はいくつかの uniord 関数を試しましたが、それらはすべて 260 ではなく 256 を報告します。

助けてくれてありがとう!

よろしく

4

5 に答える 5

11

ord()バイトごとに動作します (すべてではないにしても、ほとんどの PHP 標準文字列関数と同様)。たとえば、マルチバイト文字列拡張機能を使用して、独自に変換する必要があります。

$utf8Character = 'Ą';
list(, $ord) = unpack('N', mb_convert_encoding($utf8Character, 'UCS-4BE', 'UTF-8'));
echo $ord; # 260
于 2012-04-26T12:22:34.047 に答える
4

試す:


function uniord($c) {
        $h = ord($c{0});
        if ($h <= 0x7F) {
            return $h;
        } else if ($h < 0xC2) {
            return false;
        } else if ($h <= 0xDF) {
            return ($h & 0x1F) << 6 | (ord($c{1}) & 0x3F);
        } else if ($h <= 0xEF) {
            return ($h & 0x0F) << 12 | (ord($c{1}) & 0x3F) << 6
                                     | (ord($c{2}) & 0x3F);
        } else if ($h <= 0xF4) {
            return ($h & 0x0F) << 18 | (ord($c{1}) & 0x3F) << 12
                                     | (ord($c{2}) & 0x3F) << 6
                                     | (ord($c{3}) & 0x3F);
        } else {
            return false;
        }
    }
    echo uniord('Ą');
于 2012-04-26T12:23:30.147 に答える
1

これは、@hakre の作業に基づいた JavaScript と同等であるはずですが、charCodeAt()実際には JavaScript と同じように動作するように修正されています (テストするために考えられるすべての方法で):

function charCodeAt($string, $offset) {
  $string = mb_substr($string, $offset, 1);
  list(, $ret) = unpack('S', mb_convert_encoding($string, 'UTF-16LE'));
  return $ret;
}

(これには、PHP 拡張機能「mbstring」をインストールして有効にする必要があります。)

于 2016-06-20T01:18:03.787 に答える