改进-feature #62
文章标点符号自动转换
| 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–', '...', '``', '\'s', '\'\'', ' (tm)'), $cockney);$static_replacements = array_merge(array('—', ' — ', '–', 'xn--', '…', '“', '’s', '”', ' ™'), $cockneyreplace);
$dynamic_characters = array('/\'(\d\d(?:’|\')?s)/', '/(\s|\A|")\'/', '/(\d+)"/', '/(\d+)\'/', '/(\S)\'([^\'\s])/', '/(\s|\A)"(?!\s)/', '/"(\s|\S|\Z)/', '/\'([\s.]|\Z)/', '/(\d+)x(\d+)/');$dynamic_replacements = array('’$1','$1‘', '$1″', '$1′', '$1’$2', '$1“$2', '”$1', '’$1', '$1×$2');
你到底需要保留的是什么标点?考虑到英文用户的需要,我们不会全局取消这种字符的取代。