如何删除 PHP 中的所有多字节字符?
How to remove all multibyte characters in PHP?
我想过滤我的变量并删除除其中一些之外的所有多字节字符(我拥有的波斯字符列表)。
我怎么能在 PHP 中做到这一点?
编辑#1:
这是我的字符串代码:
// variable
$str = ' سلامoff3 ';
// array of persian characters
$to = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ',
'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ',
'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء',];
我想替换除波斯语字符以外的所有多字节字符(有波斯语字符和 数字 3 后的一个多字节隐藏字符)。
编辑#2:
隐藏字符不可见,但在 phpStorm 中可见。我认为 Whosebug 正在过滤无效字符(我想做的)。
最简单的方法是使用 mb_string
:
$str = ' سلامoff3 '; // variable
$to = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء',]; //
$cleaned = "";
for ($i = 0;$i <mb_strlen($str);$i++) {
$char = mb_substr($str,$i,1);
if (mb_strlen($char) == strlen($char) || in_array($char,$to)) {
$cleaned .= $char;
}
}
print_r($cleaned);
想法是遍历每个字符(通过 mb 函数获取实际字符)并在将其添加到新字符串之前检查它是单字节还是在允许列表中。
请注意,此解决方案需要 mb_string
我想过滤我的变量并删除除其中一些之外的所有多字节字符(我拥有的波斯字符列表)。
我怎么能在 PHP 中做到这一点?
编辑#1:
这是我的字符串代码:
// variable
$str = ' سلامoff3 ';
// array of persian characters
$to = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ',
'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ',
'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء',];
我想替换除波斯语字符以外的所有多字节字符(有波斯语字符和 数字 3 后的一个多字节隐藏字符)。
编辑#2:
隐藏字符不可见,但在 phpStorm 中可见。我认为 Whosebug 正在过滤无效字符(我想做的)。
最简单的方法是使用 mb_string
:
$str = ' سلامoff3 '; // variable
$to = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء',]; //
$cleaned = "";
for ($i = 0;$i <mb_strlen($str);$i++) {
$char = mb_substr($str,$i,1);
if (mb_strlen($char) == strlen($char) || in_array($char,$to)) {
$cleaned .= $char;
}
}
print_r($cleaned);
想法是遍历每个字符(通过 mb 函数获取实际字符)并在将其添加到新字符串之前检查它是单字节还是在允许列表中。
请注意,此解决方案需要 mb_string