WordPress 中英文混排时的自动排版
2013 年 05 月 03 日我每天都会使用 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 = "scmscm";// 数据库密码 $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'; ?> |
另外,还要吐槽一句:为什么很多人都不知道英文标点后面要加空格呢?