我每天都会使用5~6次Wikipedia和Google Search来查找资料。

我每天都会使用 5~6 次 Wikipedia 和 Google Search 来查找资料。

可以看出当中文与英文、数字之间含有一个空格时,可读性(Readability)更好。关于这方面的介绍,可以查看知乎上的这篇文章:中英文混排时中文与英文之间是否要有空格?

以下是利用 WordPress 的 Filter 和 PHP 的正则表达式替换实现对所有文章和评论进行自动排版。因为中英混排没有国家标准,只是个人习惯,所以每个人的需求都不同,按需要增加删减代码就好了。将以下代码放入主题functions.php即可:

function ce_hybrid_fix($content) {
	// 将@内容提取,避免评论者名字被处理
	$at = preg_replace('/(^\<a href="#(li-)?comment-.*?\/a\>)(.*)/si','$1',$content);
	if($at == $content)$at = '';
	$new_content = preg_replace('/^\<a href="#(li-)?comment-.*?\/a\>(.*)/si','$2',$content);
	// 主要替换规则
	$new_content = preg_replace("/([\x{4e00}-\x{9fa5}])([a-z0-9©®#;=_\[\]\$\%\^\*\-\+\(\/])/iu","$1 $2",$new_content);
	$new_content = preg_replace("/([a-z0-9©®#!~&;=_\?\[\]\,\.\:\?\$\%\^\*\-\+\)\/])([\x{4e00}-\x{9fa5}])/iu","$1 $2",$new_content);
	return $at . $new_content;
}
add_filter('content_save_pre', 'ce_hybrid_fix');
add_filter('title_save_pre', 'ce_hybrid_fix');
add_filter('pre_comment_content', 'ce_hybrid_fix');

对已有文章和评论进行替换,已注释的语句为替换评论的代码,使用时去掉注释并注释掉上一行替换文章的代码。使用时上传到任意目录并在地址栏中执行即可:

<?php
$hostname_blog = "localhost";//MySQL 数据库位置
$database_blog = "wordpress";// 数据库名
$username_blog = "root";// 数据库用户名
$password_blog = "root";// 数据库密码
$blog = mysql_pconnect($hostname_blog, $username_blog, $password_blog) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_query("SET NAMES UTF8");
 
function change($id,$content)
{
 
	$at = preg_replace('/(^\<a href="#(li-)?comment-.*?\/a\>)(.*)/si','$1',$content);
	if($at == $content)$at = '';
	$new_content = preg_replace('/^\<a href="#(li-)?comment-.*?\/a\>(.*)/si','$2',$content);
	$new_content = preg_replace("/([\x{4e00}-\x{9fa5}])([a-z0-9©®#;=_\[\]\$\%\^\*\-\+\(\/])/iu","$1 $2",$new_content);
	$new_content = preg_replace("/([a-z0-9©®#!~&;=_\?\[\]\,\.\:\?\$\%\^\*\-\+\)\/])([\x{4e00}-\x{9fa5}])/iu","$1 $2",$new_content);
	$sql = "UPDATE wp_posts SET post_content = '$new_content' WHERE ID = $id";
	//$sql = "UPDATE wp_comments SET comment_content = '$new_content' WHERE comment_ID = $id";
	mysql_query($sql);
}
 
mysql_select_db($database_blog, $blog);
$query = "SELECT * FROM wp_posts ORDER BY ID ASC";
//$query = "SELECT * FROM wp_comments ORDER BY comment_ID ASC";
$all = mysql_query($query);
$row = mysql_fetch_assoc($all);
 
do {
	change( $row['ID'], $row['post_content']);
	//change( $row['comment_ID'], $row['comment_content']);
} while ($row = mysql_fetch_assoc($all));
 
 
echo 'ok';
 
?>

经常贴大量代码的请慎用。

另外,还要吐槽一句:为什么很多人都不知道英文标点后面要加空格呢?

  1. 没想到遇到跟我同样纠结这个问题的人。 :wink:

  2. →_→ 这吐槽,和我们之前的老师一样。她说你们英语专业的连标点符号都不会用,让我怎么放心...

    • @包子
      这不能将责任归于学生,从小到大老师就从来没教过英语标点的详尽使用方法,我现在还见有人用顿号分割英语词汇呢。而且像 closestool 这种贴近生活的单词我认为小学就必须掌握。

    • @小虾
      不过她已经在班上说过多次,是先标点,后空格而不是先空格,后标点了…

    • @包子
      英语专业肯定要求高,我们当时很少在计算机上写英文,毕业论文时真是错误百出,Word 上的满屏红色波浪线都被无视了。
      之后养成了正确使用英语标点的习惯,这是对他人的尊重。亡羊补牢,为时未晚!

  3. 这个域名有点强呀!国人也有买 de 域名的呀,真没想到!

  4. [...] Chrome Extension :为什么你们就不能加个空格呢 [03.05.18] WordPress 中英文混排时的自动排版 [...]

  5. 还有,小虾你这个主题还是像以前那样在左侧会帅气很多,有自己的港南 style,现在居中了反而觉得没有重心了,随时会掉入万丈深渊的赶脚。

  6. 好吧,一直都是手动加空格的路过,很辛苦。最后请问勃煮,如果添加了这些代码到 funtions.php 里面之后,那么意思是是否只对新产生的文章和评论生效?对于以前的文章有什么解决办法?另外还有,如果我本身已经手动添加了空格,那么这段代码会不会出现再多加一个空格的情况?感谢勃煮。 :cool:

    PS:汉学家称这个空白字元为「盘古之白」,因为它劈开了全形字和半形字之间的混沌。另有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。

    以上和大家共勉之。

    • @Massen
      原来还有这种典故,共勉共勉... 其实替换这段就是抄得那个 Chrome 扩展,现成的正则表达式。
      是只对新评论和文章生效,对旧文章和评论还得另写 SQL 替换,正好我替换的时候用过,现在也贴出来。
      另外不会对文章已有的空格造成影响的,但是替换前还是需要注意备份一下,以防出错。

    • @小虾
      thanks for you wrok! :razz: 居然提示必须要输入汉字。。。

  7. 你的主题在 1920*1080 下显示左边了~~ 哈哈哈

  8. 这个不错,拿来学习学习。

  9. =。= 用过 word 打英文就会发现标点后面没空格会出现红色波浪线.... :razz: