【问题标题】:removing hidden spaces in perso-arabic string删除 perso-arabic 字符串中的隐藏空格
【发布时间】:2015-12-18 14:57:15
【问题描述】:

我有一个字符串 بشكه,它有 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)

我用过 trim 或 preg_replace("/\s| /",'',$string) 之类的常用函数,没用

是否有更多关于这些隐藏角色的信息,例如它们的真实身份以及如何删除它们?

【问题讨论】:

  • &lt;= -> &lt; 如果您将字符串作为数组访问,则它是基于 0 的索引
  • @Rizier123 抱歉,我已经更正了
  • 字符串末尾有一个隐藏字符。只需重新输入或删除字符。
  • @Rizier123 字符串是动态的,它来自数据库,我不能只删除最后一个字符!
  • 然后你可以删除所有你想要保留的东西

标签: php regex preg-replace


【解决方案1】:

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

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

【讨论】:

  • 问题是,这将删除想要的字符,比如我需要保留的单词之间的空格,如果字符串是“A B”,我希望保留之间的空格..我希望删除隐藏的字符只有
  • thanx ,这很好用......如果我想在正则表达式中添加数字和/或一些自定义字符,如 -_: ,你知道可能会发生的事情在一个字符串中
  • @SamMi 只需将它们包含在字符类中即可[_.!$...]
【解决方案2】:

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

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

【讨论】:

  • 这将删除想要的字符,例如我需要保留的单词之间的空格
猜你喜欢
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2017-11-20
相关资源
最近更新 更多