WordPress 中英文混排时的自动排版

我每天都会使用 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';
 
?>

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

农行网银弱爆了

简单两步就能破解农行网银注册短信息服务的限制,不用再去跑银行了。

很多年前办了一张农行卡和网银,今天支付时(超过 1000,算是网银的大额交易)提示“尊敬的客户,您尚未注册安全认证手机号,您的大额支付可能无法成功,请去我行网点或在个人网银系统中注册安全认证手机号”。而我按照网银提示去注册安全认证手机号时,又提示我“您未注册短消息服务手机号码”,从而无法注册安全认证手机号。按网络上对这种问题的解释,我必须亲自带上身份证、银行卡和手机到开户行重新认证手机号,但我实在不想为这个破网银的破问题跑一趟。

农行注册安全认证手机号的流程是这样的:选定一个账户,然后再输入一个与其绑定的手机,接收验证码来验证。但是因为我没有注册短信息服务手机号码,所以选定账号后会提示我必须到营业网点去重新注册,手机号码的输入框是被禁止的。看错误提示的行为农行网银应该是通过 JavaScript 判断手机号后再提交数据的。直接开启 IE 到网银界面,然后打开开发人员工具,手机号码input标签有disabled="" onsubmit="return false"俩属性,原来这么简单,直接去掉disabled="",强制填入手机号,提交,成功收到验证码!

尼玛稍稍动动脑子,省了趟跑银行的功夫。还有农行网银这么搞让人不放心啊 :evil:

旧物

要搬家了,虽然那房子已经好几年没人住了。上周末过去收拾了一下,把中学时值得纪念的东西搬了过来。

dsc00563

现今是高富瘦帅的王胖儿,当时还是王胖儿。他画的以我为猪脚的西瓜虾连环漫画,里面出现了班里大多数活跃分子的形象。比如大圣、小老虎、野驴(阿保机)、大熊等等,更有纪念意义的是里面有许多同学留下的稚嫩笔迹。
阅读全文 »