在对这个问题的答案的评论中暗示PHP 不能反转 Unicode 字符串。
至于 Unicode,它可以在 PHP 中使用,因为大多数应用程序将其作为二进制处理。是的,PHP 是 8 位干净的。在 PHP 中尝试等效的方法: perl -Mutf8 -e 'print scalar reverse("ほげほげ")' 你会得到垃圾,而不是 "げほげほ"。– 杰罗克威
不幸的是,PHP 的 unicode 支持 atm 充其量“缺乏”是正确的。这将有望随着 PHP6 发生巨大变化。
PHP的MultiByte 函数确实提供了处理 unicode 所需的基本功能,但它不一致并且缺少很多功能。其中之一是反转字符串的函数。
我当然想把这段文字翻过来,然后再弄清楚是否有可能。我创建了一个函数来完成反转这个 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";
}