删除perso-arabic字符串中的隐藏空格

时间:2015-12-18 14:57:16

标签: php regex preg-replace

我有一个包含4个字符的字符串بشكه 当我做mb_strlen时,结果是5,这意味着那里有一个隐藏的字符

我已经通过其角色循环找出最新情况

$string  = 'بشكه‌'; 

$string = trim($string);
$string = preg_replace("/\s| /",'',$string);

echo ' total length : '.mb_strlen( $string , "UTF-8" ) ;
echo '<br />';

 for( $i = 0; $i < mb_strlen( $string , "UTF-8" ); $i++ ) {
    $char_b = mb_substr( $string , $i, 1 , "UTF-8");
    echo $i . ' -> '.$char_b ;
   var_dump($char_b );
   echo '<br />';
}

这是输出

total length : 5
0 -> ب

string 'ب' (length=2)


1 -> ش

string 'ش' (length=2)


2 -> ك

string 'ك' (length=2)


3 -> ه

string 'ه' (length=2)


4 -> ‌

string '‌' (length=3)

我使用了修饰或preg_replace(“/ \ s | /”,'',$ string)之类的常用功能,它不起作用

无论如何都要找到更多关于这些隐藏字符的内容,比如它们到底是什么以及如何删除它们?

2 个答案:

答案 0 :(得分:1)

如果您不知道需要删除什么,只需将其反转并删除除了您想要保留的内容之外的所有内容,例如。

$string = preg_replace("/[^\p{L}[:space:]]/u",'',$string);
  • u修饰符,用于匹配unicode
  • \p{L} unicode words的字符类
  • [:space:]代表空格

答案 1 :(得分:0)

您可以使用此正则表达式捕获utf8单词:

$string = 'بشكه‌'; $string = preg_match('/\p{L}+/u', $string, $matches); var_dump($matches[0]);