在对这个问题的回答的评论中,暗示了PHP无法反转Unicode字符串。
对于Unicode,PHP可以工作,因为大多数应用程序将其处理为二进制。是的,PHP是8位清洁的。在PHP中尝试相当于这个的等效物:perl -Mutf8 -e 'print scalar reverse("ほげほげ")' 你会得到垃圾,而不是"げほげほ"。- jrockway
不幸的是,PHP的Unicode支持目前最多只能说是"不足"。这将随着PHP6的到来而有着巨大的改变。
PHP的MultiByte函数提供了处理Unicode所需的基本功能,但它是不一致的,并且缺少很多函数。其中一个就是反转字符串的函数。
当然,我只是想反转这段文本,没有其他原因,只是为了弄清楚是否可能。我编写了一个函数来完成这个巨大而复杂的任务,以反转这段Unicode文本,所以你可以再放松一会儿,直到PHP6发布。
测试代码:
对于Unicode,PHP可以工作,因为大多数应用程序将其处理为二进制。是的,PHP是8位清洁的。在PHP中尝试相当于这个的等效物:perl -Mutf8 -e 'print scalar reverse("ほげほげ")' 你会得到垃圾,而不是"げほげほ"。- jrockway
不幸的是,PHP的Unicode支持目前最多只能说是"不足"。这将随着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";
}