こんにちはカトーです。
密かに個人ブログもいくつか運営してるのですが、久しぶりにログインしてアップデートしたら警告を吐いてました。
1 2 3 4 5 |
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in webroot/wp/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in webroot/wp/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in webroot/wp/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in webroot/wp/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in webroot/wp/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 |
エラーの原因は記事中にコードを表示するcrayon-syntax-highlighterの正規表現の部分のエラーなのですが、
困った事にphp7.3にcrayon-syntax-highlighterは最新バージョン 2.8.4でも最終更新日は 3年前。
PHP 7.2 までは正常に動いていたものが、PHP 7.3にバージョンアップす警告を出します。
正しい方法としては、使用を辞めて他のプラグインに切り替えるのでしょうが、コード確認と過去の記事確認、違うプラグインの選択も含めて結構手間です。
またエンジニアとしては、PHPの警告だけなら修正かな?と思ってましたが、ありがたい事に使っている有志が対応を用意してあります。
crayon-syntax-highlighterのアップデート
Crunchify/crayon-syntax-highlighter
Crayon Syntax Highlighter & PHP 7.3 fix
https://github.com/Crunchify/crayon-syntax-highlighter/releases
ダウンロードし解凍したファイルを、wp-content/plugins/crayon-syntax-highlighter に上書きで使えます。
自分で修正する場合は?
自分で修正する場合は、/plugins/crayon-syntax-highlighter/crayon_langs.class.phpの340行目付近、
検索するとバックスラッシュと入れるといいとありますが……すいませんが、ここは動作確認をしてませんが多分動きます。
1 |
return preg_replace('/[^\w\-+#]/msi', '', $id); |
preg_match()関数も正規表現のマッチングの挙動が7.2系から7.3系で変わってるのこのせいでしょうか。
調べると、”PHPが使用する正規表現ライブラリのバージョンが、最近変更された可能性じゃね?”
”PCREライブラリがサーバー上でアップグレードされた場合は、それが理由である可能性だろ?”
1 2 3 4 |
A character class range is defined by using - between two values in a character class ([] in regex). [0-9] means everything between 0 and 9, inclusive. In the regular expression in your code, you have several character class ranges, a-z, 0-9. There is also one class that you probably didn't mean to put there, namely _-\s. |
……と掲示板にありました。
多分、ハイフンあたりの指定が違うので、バックスラッシュでエスケープで逃げる対応になるでしょうか?
あまり宜しい事がありませんが、今後この対応は増えるかもしれません。
使用注意・乗り換えは?
皆が選んでいる現在の乗り換えは、Urvanov Syntax Highlighter、Enlighter – Customizable Syntax Highlighter、あたりでしょうか?
いずれこちらも乗り換えようと思います。
最後に
WordPressは本当に便利ですが、便利な用意のひとつにプラグインですが、アップデートされないで止まってしまうプラグインも悩みの種の一つ。CVEや脆弱性情報を見てると本当に頭がいたいところです。
ただ記事を書くだけらDremweaverから直か、WYSIWYGとPOSTする簡単なCRUDでもいいのですが……。