返回 导航

其他

hangge.com

PHP - 自动在中文和英文间插入空格

作者:hangge | 2017-05-14 08:10
如果我们打字的时候不习惯在中文汉字和英文之间敲个空格,而是让它们挤在一块,那么会十分影响阅读。下面介绍如何使用 PHP 在连续的中英文间插入空白,这个功能可以用在在文章提交的时候自动进行处理,也可以用在中英文分词上,方便后台搜索。

一、在双字节字符与英文间插入空格

1,插入空格方法

(1)我们通过正则表达式进行替换,即将双字节字符(包括汉字和符号)与英文、数字、下划线之间添加一个空格。使用的正则规则如下:
  • [\x80-\xff]:表示 utf-8 编码中的非 ascii 编码字符,可以用来简单地匹配汉字和标点符号
  • \w:表示数字、26 个英文字母或者下划线

(2)一共替换两次,分别对应英文在后、英文在前两种情况。
//将双字节字符与英文、数字、下划线之间添加一个空格
function insert_spacing($str) {
  $str = preg_replace('/([\x80-\xff]*)(\w+)/', '${1} ${2}', $str);
  $str = preg_replace('/(\w+)([\x80-\xff]*)/', '${1} ${2}', $str);
  return $str;
}

2,使用样例

$str = 'hello大家好,我是hangge';
echo "<br>--- 处理前 ---<br>";
echo $str;
echo "<br><br>--- 处理后 ---<br>";
echo insert_spacing($str);
运行结果如下:

二、在汉字与英文间插入空格

上面方法匹配的双字节字符与英文,如果英文前后是符号的话,也会插入空格。

1,插入空格方法

这里对正则表达式做个修改,只有汉字与英文、数字、下划线之间添加一个空格。
//将汉字与英文、数字、下划线之间添加一个空格
function insert_spacing($str) {
  $str = preg_replace('/([\x{4e00}-\x{9fa5}]+)([A-Za-z0-9_]+)/u', '${1} ${2}', $str);
  $str = preg_replace('/([A-Za-z0-9_]+)([\x{4e00}-\x{9fa5}]+)/u', '${1} ${2}', $str);
  return $str;
}

2,使用样例

$str = '欢迎访问hangge.com';
echo "<br>--- 处理前 ---<br>";
echo $str;
echo "<br><br>--- 处理后 ---<br>";
echo insert_spacing($str);
可以看到英文字符前后如果是符号的话,是不会插入空格的。
评论

全部评论(0)

回到顶部