WordPress 1.5 的标点符号问题
二月 17th, 2005
刚才看到在 kDolphin 的中英双引号的问题中提到偶曾经说过的 WordPress 1.5 强制转义某些英文标点符号的问题,索性就在这里说说清楚吧。
事实上这个不是浏览器的问题,是 wp-includes\functions-formatting.php 中的 wptexturize() 函数在搞鬼。在页面被显示时(只是被显示时,数据库的标点符号还是正确的),它会把英文的单双引号和键盘上 TAB 键上面那个斜点符号以及其他一些东西都强行转换成了 Unicode 里的 CJK 标点符号,也就是全角的中文标点符号。这个函数会作用于站点标题、blog 标题、blog 内容、回复内容等地方。
它把标点符号变丑也就算了,关键是这样一转换会造成文章本来的意义被破坏,特别是有程序代码的文章。其实这就是我一直没有升级 1.5 的主要原因之一,另一个原因是懒得修改 style。 虽然可以自己很容易的修改一下这个函数,让 WP 1.5 不这么做,但是我不知道 WP 1.5 默认强制这么做会不会是因为某些地方依赖这个做法,比如不这么做可能会在某个地方出大问题。
大家来讨论一下吧。
以下是我注释掉的 wptexturize() 函数中的行
// This is a hack, look at this more later. It works pretty well though.
//$cockney = array("'tain't","'twere","'twas","'tis","'twill","'til","'bout",
// "'nuff","'round");
//$cockneyreplace = array("'tain't","'twere","'twas",
// "'tis","'twill","'til","'bout","'nuff","'round");
//$curl = str_replace($cockney, $cockneyreplace, $curl);
//$curl = preg_replace("/'s/", ''s', $curl);
//$curl = preg_replace("/'(\d\d(?:'|')?s)/", "'$1", $curl);
//$curl = preg_replace('/(\s|\A|")'/', '$1'', $curl);
//$curl = preg_replace('/(\d+)"/', '$1"', $curl);
//$curl = preg_replace("/(\d+)'/", '$1'', $curl);
//$curl = preg_replace("/(\S)'([^'\s])/", "$1'$2", $curl);
//$curl = preg_replace('/(\s|\A)"(?!\s)/', '$1"$2', $curl);
//$curl = preg_replace('/"(\s|\S|\Z)/', '"$1', $curl);
//$curl = preg_replace("/'([\s.]|\Z)/", ''$1', $curl);
//$curl = preg_replace("/ \(tm\)/i", ' ™', $curl);
//$curl = str_replace("''", '"', $curl);
Tags: Software 软件, WordPress
二月 17th, 2005 at 18:48
但是FF浏览的时候无论中英文引号全部用英文引号表示,IE在set default是英文的win环境下也并不会把英文引号转成中文的。
wp输出中英文引号的时候都是输出成"这样的命名实体,于是IE就根据当前语言格式来显示引号,不知道我猜的对不对?
二月 17th, 2005 at 19:00
很抱歉你猜错了 ;) 可以打开我说的那个 WP 源代码文件,就在最前面的 wptexturize() 函数里就可以看到它使用 PHP 的正则表达式函数把那些英文标点直接替换成了形如 &8217; 这样的字符实体。而 Firefox 只是显示这些字符时看上去像英文的,把它们复制到记事本里,就原形毕露了。
二月 17th, 2005 at 19:29
明白了,不懂程序所以看不明白。
另外你的空间是哪里的?我那里实在不行想换。
二月 17th, 2005 at 20:30
偶用的是朋友的论坛空间,SEFans.com 的。
二月 19th, 2005 at 22:17
好像使用<code>就没这个问题了。
二月 19th, 2005 at 23:11
嗯,<pre> 也行。
但是还是觉得不爽,比如偶的标题本来全是英文,结果中间那个 ' 变成了全角符号,巨丑……
过一段有时间改改再换吧。
十一月 20th, 2005 at 21:41
不知道这个问题解决了没有。
我按照你的方法把那几行给注释掉了,不过真的挺怕影响到WP的其他功能。
一月 12th, 2006 at 06:26
[...] 有這麼一篇 WordPress 1.5 的標點符號問題 ,理頭寫了取消這個功能的方法,這也同樣適用 [...]
一月 12th, 2006 at 06:27
[...] 有這麼一篇 WordPress 1.5 的標點符號問題 ,理頭寫了取消這個功能的方法,這也同樣適用 [...]
一月 17th, 2006 at 06:40
感谢,找到根源问题了,原来是这里在搞鬼 :D
另外,我做了一个针对标点符号错误的插件,希望大家喜欢:
http://www.sparanoid.com/2006/01/10/quotmarks-replacer/
二月 7th, 2006 at 16:01
可以说是不存在问题的,该段语法的功能是对输出进行处理
内部还是英文标点进行存储
二月 8th, 2006 at 00:09
嗯,大概是为了避免一些特殊符号造成 XHTML 语法错误,看来只要自己写作时小心,应该是没有问题的了。
七月 20th, 2006 at 13:28
[...] 参考文章:《WordPress 1.5 的标点符号问题》 作者:Rainux [...]
十一月 2nd, 2007 at 14:05
3x,2.3里文件位置发生了变化,总体区别不大
http://blog.fivestone.cn/?p=455
难道老外也习惯做这种替换的?存成他们自己的ansi会不会乱码啊?
十二月 28th, 2007 at 16:51
[...] 简单做了一下试验,和主题样式无关,和汉化中文包无关,数据库里的原始数据也没有变化,应该是WordPress程序本身的问题。在Rainux的blog中查到了解决方案,但原文说的还是WordPress 1.5的版本,2.3版源程序做过改动,在类似的位置也很容易找到。 [...]
一月 11th, 2008 at 09:50
[...] 简单做了一下试验,和主题样式无关,和汉化中文包无关,数据库里的原始数据也没有变化,应该是WordPress程序本身的问题。在Rainux的blog中查到了解决方案,但原文说的还是WordPress 1.5的版本,2.3版源程序做过改动,在类似的位置也很容易找到。 [...]
三月 29th, 2008 at 20:30
[...] 简单做了一下试验,和主题样式无关,和汉化中文包无关,数据库里的原始数据也没有变化,应该是WordPress程序本身的问题。在Rainux的blog中查到了解决方案,但原文说的还是WordPress 1.5的版本,2.3版源程序做过改动,在类似的位置也很容易找到。 [...]