この質問への回答に対するコメントで、 PHP は Unicode 文字列を反転できないことが示唆されました。
Unicode については、ほとんどのアプリがバイナリとして処理するため、PHP で動作します。はい、PHP は 8 ビット クリーンです。これに相当するものを PHP で試してください: perl -Mutf8 -e 'print scalar reverse("ほげほげ")' "げほげほ" ではなく、ゴミが表示されます。– jrockway
残念ながら、PHP の Unicode サポート atm がせいぜい「欠けている」というのは正しいことです。これは、PHP6 で大幅に変更されることを願っています。
PHPのMultiByte 関数は、Unicode を処理するために必要な基本的な機能を提供しますが、一貫性がなく、多くの関数が欠けています。これらの 1 つは、文字列を逆にする関数です。
もちろん、それが可能かどうかを判断するために、他の理由でこのテキストを逆にしたかったのです。そして、この Unicode テキストを反転するという非常に複雑なタスクを実行する関数を作成したので、PHP6 まではもう少しリラックスできます。
テストコード:
$enc = 'UTF-8';
$text = "ほげほげ";
$defaultEnc = mb_internal_encoding();
echo "Showing results with encoding $defaultEnc.\n\n";
$revNormal = strrev($text);
$revInt = mb_strrev($text);
$revEnc = mb_strrev($text, $enc);
echo "Original text is: $text .\n";
echo "Normal strrev output: " . $revNormal . ".\n";
echo "mb_strrev without encoding output: $revInt.\n";
echo "mb_strrev with encoding $enc output: $revEnc.\n";
if (mb_internal_encoding($enc)) {
echo "\nSetting internal encoding to $enc from $defaultEnc.\n\n";
$revNormal = strrev($text);
$revInt = mb_strrev($text);
$revEnc = mb_strrev($text, $enc);
echo "Original text is: $text .\n";
echo "Normal strrev output: " . $revNormal . ".\n";
echo "mb_strrev without encoding output: $revInt.\n";
echo "mb_strrev with encoding $enc output: $revEnc.\n";
} else {
echo "\nCould not set internal encoding to $enc!\n";
}