ord() を使用して、javascript の charCodeAt() 関数と同じ値を取得できるようにする必要があります。問題は、ord() が UTF8 をサポートしていないことです。
PHPでĄを260に変換するにはどうすればよいですか? 私はいくつかの uniord 関数を試しましたが、それらはすべて 260 ではなく 256 を報告します。
助けてくれてありがとう!
よろしく
ord() を使用して、javascript の charCodeAt() 関数と同じ値を取得できるようにする必要があります。問題は、ord() が UTF8 をサポートしていないことです。
PHPでĄを260に変換するにはどうすればよいですか? 私はいくつかの uniord 関数を試しましたが、それらはすべて 260 ではなく 256 を報告します。
助けてくれてありがとう!
よろしく
ord()
バイトごとに動作します (すべてではないにしても、ほとんどの PHP 標準文字列関数と同様)。たとえば、マルチバイト文字列拡張機能を使用して、独自に変換する必要があります。
$utf8Character = 'Ą';
list(, $ord) = unpack('N', mb_convert_encoding($utf8Character, 'UCS-4BE', 'UTF-8'));
echo $ord; # 260
試す:
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('Ą');
これは、@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」をインストールして有効にする必要があります。)