我在从字符串中删除非utf8字符时遇到问题,这些字符无法正常显示.字符是这样的0x97 0x61 0x6C 0x6F(十六进制表示)
删除它们的最佳方法是什么?正则表达式还是其他什么?
试图将这个字符串"主楼怎么走"拆分成单独的字符(我需要一个数组)使用mb_split没有运气...有什么建议吗?
谢谢!
在对这个问题的答案的评论中暗示PHP无法反转Unicode字符串.
至于Unicode,它适用于PHP,因为大多数应用程序将其处理为二进制.是的,PHP是8位干净的.在PHP中尝试相当于这个:perl -Mutf8 -e'print scalar reverse("ほげほげ")'你会得到垃圾,而不是"げほげほ". - jrockway
不幸的是,PHPs 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 …Run Code Online (Sandbox Code Playgroud) 我想允许所有 utf8 字符,但想用空格或 - 替换非 utf8
这是字符串
Punjab me 1Train k niche 100 Sardar aa gaye..
99 Mar gaye...
1 Bach gaya
Run Code Online (Sandbox Code Playgroud)
无论我做什么,它都不会在火车后插入
它在火车上的修剪
我已经尝试过这两个链接
我想要完整的 utf8 范围插入 mysql 并用空格或 - 替换非 utf8
$string = preg_replace('/[^(\x20-\x7F)]*/','', $string);
Run Code Online (Sandbox Code Playgroud)
适用于上述情况,但当我使用印地文/中文时,它也会替换它。所以我不能使用上面的代码