2017-02-14 95 views
-1

我想筛选我的变量,并删除所有多字节字符,但其中一些(我有的波斯字符列表)。 我怎么能在PHP中做到这一点?
编辑#1:
这里是我的字符串代码:如何删除PHP中的所有多字节字符?

// variable 
$str = ' سلامoff3 '; 

// array of persian characters 
$to = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 
     'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 
     'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء',]; 

我要替换除了波斯文字(有波斯文字和位3后一个多字节隐藏字符)的所有多字节字符。
编辑#2:
隐藏的字符不可见,但在phpStorm中是可见的。我认为StackOverFlow正在过滤无效字符(我想要做的)。

+0

开始通过展示我们的变量和波斯字符的列表,到目前为止你已经尝试了什么。 (不是我的倒票) – JustBaron

+0

你需要给我们一些信息。你想要保留的角色列表是什么以及你想要移除的角色是什么。另外,你的变量是什么。 – Nicolas

回答

1

直截了当的方式做,这将使用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

+0

非常感谢。这是一个明智的解决方案;) –

相关问题