删除unicode隐藏空间,转换为拉丁编码

时间:2016-04-22 14:10:43

标签: php string unicode character-encoding

所以我有2个相似的字符串

<link href='https://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>

我一直在数据库中做一些查询,当我注意到这些相似的单词返回不同的结果...所以我写了这个小代码来逐字符地比较它们

$no_space    = ',بشکه,';

$with_space  = ',بشکه‌,';

所以这是我运行在unicode

上设置资源管理器文本编码的代码时的结果
$no_space    = ',بشکه,';
$with_space = ',بشکه‌,';


echo '<br /> ------------------------------------------ <br />';
$string  = $no_space; 

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

echo '<br /> ------------------------------------------ <br />';

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

你可以看到第二个字符串的第五个字符中有一个空格 但是当我在拉丁编码上使用explorere运行代码时,我得到了这个结果

 total length : 6
0 -> ,
1 -> ب
2 -> ش
3 -> ک
4 -> ه
5 -> ,

------------------------------------------
total length : 7
0 -> ,
1 -> ب
2 -> ش
3 -> ک
4 -> ه
5 -> ‌
6 -> ,

第五个字符给了我 total length : 6 0 -> , 1 -> ب 2 -> Ø´ 3 -> Ú© 4 -> Ù‡ 5 -> , ------------------------------------------ total length : 7 0 -> , 1 -> ب 2 -> Ø´ 3 -> Ú© 4 -> Ù‡ 5 -> ‌ 6 -> , 这显然不是空格,我知道如果我在字符串中添加一个空格我会在输出上得到一个空格

那么‌是什么?如何从我已经尝试过的字符串中删除它

‌

甚至是像这样的傻事

$with_space= html_entity_decode($with_space, ENT_QUOTES, "UTF-8");

请注意我想从任何字符串中删除这些字符,而不仅仅是在数据库中

0 个答案:

没有答案