今天用<blockquote>标签将一段包含单引号的代码(delete from wp_posts where post_type=’revision’;)闭合起来,后台编辑的时候是英文半角状态的单引号,文章发表以后在前台页面上查看页面的时候就成了中文全角 状态的单引号。原本以为是blockquote设置的特殊字体和CSS的问题。
后来测试了一下发现WordPress中双引号 也有这个问题。两个中文的单引号(”)写在一起前台页面上就会自动转换成一个中文全角状态下的双引号(“),网上查了下发现不仅是单引号和双引号,英文状 态下的…等其他标点符号也有被自动转换成中文全角状态下的标点符号的问题。只有<code>标签里的英文半角符号不会自动转换。
如果要取消WordPress中半角英文单双引号自动转换成全角中文符号,可以采取下面的方法解决问题。
找到WordPress文件夹wp-includes目录下的formatting.php。查找到以下一个if…elseif 的循环代码:
if ( !empty($curl) && '<' != $curl{0} && '[' != $curl{0} && empty($no_texturize_shortcodes_stack) && empty($no_texturize_tags_stack)) { // This is not a tag, nor is the texturization disabled // static strings $curl = str_replace($static_characters, $static_replacements, $curl); // regular expressions $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl); } elseif (!empty($curl)) {...
将上面$curl 开头的两句代码注释掉就OK了。
if ( !empty($curl) && '<' != $curl{0} && '[' != $curl{0} && empty($no_texturize_shortcodes_stack) && empty($no_texturize_tags_stack)) { // This is not a tag, nor is the texturization disabled // static strings // 解除自动将英文标点转换成中文标点 $curl = str_replace($static_characters, $static_replacements, $curl); // regular expressions // 解除自动将英文标点转换成中文标点 $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl); } elseif (!empty($curl)) {...
一方面为了Wordpress安全考虑(允许英文状态下的这些符号可能会被执行代码,从而带来安全漏洞);另一方面为了以后WordPress升级方 便(每次都要修改Wordpress 核心文件毕竟不是好玩的事),最好的解决方案是将不想让wordpress 执行半角全角转换的内容(一般都是代码示例)放到<code></code> 或 <pre></pre>标签对里面。wordpress 是不会对<code>或<pre>标签里的英文状态下的单引号、双引号等半角符号转换为全角符号的。
在段落中的一小段代码可以用<code>标签,整段整段的代码使用<pre>标签,不再使用<blockquote>HTML 标签。
以前使用过的<blockquote>标签可以全部替换成<pre>,如通过phpmyadmin 替换文章中的<blockquote>,执行SQL语句如下:
update `wp_posts` set post_content=replace(post_content, '<blockquote>', '<pre>'); update `wp_posts` set post_content=replace(post_content, '</blockquote>', '</pre>');
复制上面放在<pre>标签里的这段代码,看看这些单引号是不是还是英文状态的呢?