PHP8.1にすると突然出るようになった「PHP Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in…」という非推奨メッセージに対する対処方法のメモです。
とあるテーマを有効化したらいきなり非推奨とされた部分が以下。
<a href="<?php echo esc_url( htmlspecialchars( get_comment_link( $comment->comment_ID ) ) , ENT_QUOTES ); ?>">
エラー内容としては、「htmlspecialchars」の中身に空(null)は使えませんよ!というものなので、空だったら「”」(nillではなく空文字)をセットするようにする(赤文字部分)と解決しました。
<a href="<?php echo esc_url( htmlspecialchars( get_comment_link( $comment->comment_ID ) ?? '' ) , ENT_QUOTES ); ?>">
この「?? ”」というのは、Null 合体演算子と呼ばれ、値がない(null)の場合には??の右側の値を返すというものです。
このメッセージの内容は、どのプログラム行という具体的なものは提示されず、それを処理したコアプログラムの位置などが書かれていて、それ自体が原因ではないことが多いので、非常に見つけるのが大変でした。
今回は、メッセージの冒頭に書かれているPHP構文(今回の場合は「htmlspecialchars」)が使われている場所を以下のプラグインを使って探したので案外簡単に見つかりましたよ。
ただ今回の場合はテーマの有効化が引き金だったものの、直前に何を変更したのかが不明だと、これを使ったとしても探すのは大変かも知れません..。
補足として、PHP8.0以降では値が空だった時のルールが厳格になったことによって、これ以外にも、空の場合の定義が不足しているとさまざまなメッセージが出ます。
また、この種のメッセージは、実際にその処理が行われないと出ないことがあるので、PHPバージョンの変更直後に発生するとは限らないことと、対応の方法がケースバイケースなので、都度対処するしかなさそうです。
最後に補足として、WordPressを普通に使っていて、突然このようなメッセージが出た!なんとかしなきゃ!と思っている方、そもそもその表示が出てしまうことが問題かも知れませんから、以下のページを参考にしてみてください。
コメントを残す