PHP に特殊文字を ASCII コードに変換する組み込み関数はありますか?
4 に答える
文字の ASCII 値を返すord 関数があります。
ASCII 番号を取り、文字を返す逆のchrもあります。
文字をある文字セットから別の文字セットに変換しようとしている場合は、iconv ライブラリを使用できます。
プレーンASCIIを使用している限り(基本的な英語のアルファベットの小文字と大文字、アラビア数字、および基本的な英語の句読点のみを意味します)、前の応答は正しいものです。それ以上を使用すると、文字エンコーディングが機能します。
まず第一に、使用しているエンコーディングを常に心に留めておく必要があります。一部のエンコーディングには存在しない文字もあり (プレーン ASCII には 127 文字しか含まれていません)、あるエンコーディングには存在するが別のエンコーディングには存在しない文字などがあります。使用しているエンコーディングを知る必要があります。
次に、一部のエンコーディングではマルチバイト文字 (utf-8 など) が使用されます。つまり、1 文字が1 バイトまたは複数バイトとして格納されます。それらには ASCII コードもありません。詳細については、Unicode に関する Joel Spolsky の記事などを参照してください。
この機能を試してください:
function ordUTF8($c, $index = 0, &$bytes = null)
{
$len = strlen($c);
$bytes = 0;
if ($index >= $len)
{
return false;
}
$h = ord($c{$index});
if ($h <= 0x7F)
{
return $h;
}
else if ($h < 0xC2)
{
return false;
}
else if ($h <= 0xDF && $index < $len - 1)
{
return ($h & 0x1F) << 6 | (ord($c{$index + 1}) & 0x3F);
}
else if ($h <= 0xEF && $index < $len - 2)
{
return ($h & 0x0F) << 12 | (ord($c{$index + 1}) & 0x3F) << 6
| (ord($c{$index + 2}) & 0x3F);
}
else if ($h <= 0xF4 && $index < $len - 3)
{
return ($h & 0x0F) << 18 | (ord($c{$index + 1}) & 0x3F) << 12
| (ord($c{$index + 2}) & 0x3F) << 6
| (ord($c{$index + 3}) & 0x3F);
}
else
{
return false;
}
}
最初のパラメータは文字列で、2 番目のパラメータは開始インデックスです (特殊文字を 1 つだけ指定した場合、これはゼロになります)。