# php删除不可见的Unicode字符

**URL:** <https://www.shiqidu.com/t/topic/454>\
**Category:** 开发调优\
**Tags:** PHP\
**Created:** [2018 年7 月 5 日 07:37 UTC](https://www.shiqidu.com/t/topic/454 "2018-07-05T07:37:27Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

作者： ![Eureka](https://www.shiqidu.com/user_avatar/www.shiqidu.com/eureka/32/5_2.png) [@Eureka](https://www.shiqidu.com/u/Eureka)\
发布日期： [2018 年7 月 5 日 07:37 UTC](https://www.shiqidu.com/t/topic/454/1 "2018-07-05T07:37:27Z")

</div>

在论坛/社区中一般帖子/文章的标题肯定是要求不为空的，但是今天发现了一个神奇的事情，我在后台php代码中限制了title不能为空。

```php
if(preg_match('/^\s*$/', $val)) return false;

```

但是神奇的发现在数据库中有几篇文章文章的title是空的(眼睛看起来)

![alt text](https://discourse.shiqidu.com/upload/discussion/20180705/8a4df0e41e57b93419617e82355dc7ea_origin.png)

而且鼠标点进去选中发现确实是空的。但是通过var\_dump打印却发现这个"空字符"占了三个长度

![alt text](https://discourse.shiqidu.com/upload/discussion/20180705/9e1eb5b946efdf31e70816dcb8c0a357_origin.png)

最后发现这个字符串的是`'\u200e'`，在十七度的编辑器里显示的是这样的一个符号。

![alt text](https://discourse.shiqidu.com/upload/discussion/20180705/b06e1f7925ea87fe0203a081d55bf35f_origin.png)

然后复制出来确实是一个空的字符串，所以只能想办法删除他。

```php
$pattern = "/[\x{007f}-\x{009f}]|\x{00ad}|[\x{0483}-\x{0489}]|[\x{0559}-\x{055a}]|\x{058a}|[\x{0591}-\x{05bd}]|\x{05bf}|[\x{05c1}-\x{05c2}]|[\x{05c4}-\x{05c7}]|[\x{0606}-\x{060a}]|[\x{063b}-\x{063f}]|\x{0674}|[\x{06e5}-\x{06e6}]|\x{070f}|[\x{076e}-\x{077f}]|\x{0a51}|\x{0a75}|\x{0b44}|[\x{0b62}-\x{0b63}]|[\x{0c62}-\x{0c63}]|[\x{0ce2}-\x{0ce3}]|[\x{0d62}-\x{0d63}]|\x{135f}|[\x{200b}-\x{200f}]|[\x{2028}-\x{202e}]|\x{2044}|\x{2071}|[\x{f701}-\x{f70e}]|[\x{f710}-\x{f71a}]|\x{fb1e}|[\x{fc5e}-\x{fc62}]|\x{feff}|\x{fffc}/u";

$str = '‎'; // 三个长度
$str = preg_replace($pattern, "", '‎');

var_dump($str); // 0长度

```
