WordPress 首页正常部分文章页面无法正常显示

前段时间因为换了服务器,所以肯定是需要搬家的,WordPress搬家后发现了一个问题,大象网首页是正常的,而部分文章页面无法正常显示,开始还觉得是不是什么文件没有上传完整,或者文件权限出现了什么问题,后来发现禁用“Crayon Syntax Highlighter”这个插件就没有问题了,但禁用了它后,文章内的代码便有点小问题了。

众所周知,Crayon Syntax Highlighter 这款插件功能强大,速度快,尤其是代码配色功能,当初大象网选择它的时候可是废了不少力气,毕竟选出一款漂亮且没有冲突的代码插件有点困难,以前还可以直接在后台安装,但最近这两年好像WordPress部分域名被墙了,还是有些不爽的。

而经过大象网的一番搜索后发现原来是“Crayon Syntax Highlighter”这款插件不兼容PHP7.3和PHP7.4,我之前用的是PHP7.1,之前一直没有问题啊,不过想必以后的版本更不可能兼容, 而事实上,当文章中加入了pre标记时也会出现问题,既然是兼容的问题原理又是如何呢?

原理也很简单,新版本的PHP语法表达发生了新的变化,所以会报错。我们先找到“wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php”这个文件,打开该文件并找到第340行,添加一个转义符号“\”就可以了。

#源代码 未修改
function clean_id($id) {
        $id = CrayonUtil::space_to_hyphen( strtolower(trim($id)) );
        return preg_replace('/[^\w-+#]/msi', '', $id);
}
#源代码 已修改
function clean_id($id) {
        $id = CrayonUtil::space_to_hyphen( strtolower(trim($id)) );
        return preg_replace('/[^\w\-+#]/msi', '', $id);
}

我们可以看到在字母w后面添加了一个\,原因就是“[”是正则表达式中的特殊字符,所以需要用\反斜杠来转义。

正则表达式中的特殊字符,就是一些有特殊含义的字符,如“*.txt”中的*,简单的说就是表示任何字符串的意思。如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\。ls \*.txt。以下是正则表达式特殊字符。

* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 \$。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\\’ 匹配 “\”,而 ‘\(‘ 则匹配 “(”。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
{ } 标记限定符表达式的开始。要匹配 {,请使用 \{。
[ ] 标记一个中括号表达式的开始。要匹配 [,请使用 \[。

构造正则表达式的方法和创建数学表达式基本异曲同工。都是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

赞(2) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《WordPress 首页正常部分文章页面无法正常显示》
文章链接:https://www.kelephant.com/oam/4496.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

登录

找回密码

注册