Home Projects Help

改进-feature #62

文章标点符号自动转换

Added by halfcool zh_CN 271 days ago. Updated 271 days ago.

Status :确认存在 Start :03/05/2008
Priority :普通 Due date :
Assigned to :Liang Jin % Done :

50%

Category :-
Fixed version :2008第三次更新

Description

原文地址:http://blog.fivestone.cn/?p=455

发现WordPress中经常会把一些西文标点做自动替换:引号变成中文引号、"..."变成"…"、连续减号变成长横线…..及其它很多东西都强行转换成了Unicode里的CJK符号,也就是中文标点。在blog标题、内容、评论内容中都存在这种替换,有时候觉得很不舒服,想把这种替换去掉。

简单做了一下试验,和主题样式无关,和汉化中文包无关,数据库里的原始数据也没有变化,应该是WordPress程序本身的问题。在Rainux的blog中(注:http://blog.newchen.com/post/371.html)查到了解决方案,但原文说的还是WordPress 1.5的版本,2.3版源程序做过改动,在类似的位置也很容易找到。

修改位于wp-includes/formatting.php的wptexturize()函数,具体的替换规则存在($ static_characters, $static_replacements)和($dynamic_characters, $dynamic_replacements)两对数组中,有兴趣的话可以更改其中内容。如果要全部取消替换,只需注释掉下面两行的内容。

Line 29 – 34:

if (isset($curl{0}) && '<' != $curl{0} && $next) { // If it's not a tag
// static strings
//$curl = str_replace($static_characters, $static_replacements, $curl);
// regular expressions
//$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
}

在Microsoft Word中写东西时遇到过类似的替换,当时还以为是中文版所独有的;如今在发现全球的WordPress中都应用这种替换。有些困惑,难道老外也用中文标点的?把这种替换后的文字另存为他们自己的ANSI格式时,会不会出现乱码?

========================
这个问题对于编程的来说比较重要吧?标点我们可以自己选择使用哪种啊!希望尽快改进。
我的一个“不爽”的文章地址:http://halfcool.72pines.com/archives/python/django-study-1/

History

03/05/2008 08:40 AM - Liang Jin

  • Status changed from 新建 to 确认存在
  • Assigned to set to Liang Jin
  • Fixed version set to 2008第三次更新
  • % Done changed from 0 to 50

WP里面的基本替换是这样定义的 (wp-includes/formatting.php的wptexturize函数)

$static_characters = array_merge(array('---', ' -- ', '--', 'xn&#8211;', '...', '``', '\'s', '\'\'', ' (tm)'), $cockney);
$static_replacements = array_merge(array('&#8212;', ' &#8212; ', '&#8211;', 'xn--', '&#8230;', '&#8220;', '&#8217;s', '&#8221;', ' &#8482;'), $cockneyreplace);

$dynamic_characters = array('/\'(\d\d(?:&#8217;|\')?s)/', '/(\s|\A|")\'/', '/(\d+)"/', '/(\d+)\'/', '/(\S)\'([^\'\s])/', '/(\s|\A)"(?!\s)/', '/"(\s|\S|\Z)/', '/\'([\s.]|\Z)/', '/(\d+)x(\d+)/');
$dynamic_replacements = array('&#8217;$1','$1&#8216;', '$1&#8243;', '$1&#8242;', '$1&#8217;$2', '$1&#8220;$2', '&#8221;$1', '&#8217;$1', '$1&#215;$2');

你到底需要保留的是什么标点?考虑到英文用户的需要,我们不会全局取消这种字符的取代。