PHPのhtmlspecialcharsで変数が空になるという

先日、業務支援用のサーバーがみごとに突然壊れてしまい、急遽新たなハードウェアを確保してOSもなにもかも新たに再構築したわけなのですが・・・

ありとあらゆるものが最新になってしまったせいで、一部の業務支援システムが微妙に動かなくて、その対応に四苦八苦してました。

PHPで5年ほど前に書いてそのまま稼働していてくれたものなのですが、新たな環境下ではなぜか一部のメッセージが空になってしまうという症状が。

サーバーログをみてみるとmbstringがどうのこうのと出ているので、ひとまずはこれを信じてmbstring周りで設定を誤ったりしていないかあれこれを試してみるものの・・・どうやら見当違いということがわかるまで2日ほど。

その後、コードを読み返して$_POSTが読めてないのだろうか?とか、php.iniのmbstringセクションでのinputとoutputの文字コード設定の組み合わせで変わるのだろうかと・・・できるだけ動いてたコードを触らずにサーバー側の設定側でなんとかできるもんだという前提であれこれ試してみてましたが、やはり無理っぽいということで諦めて、動いてたコードを見直すことに(さっさとコードを読み直せば気づくのも少しは早かったのに)。

結局のところ、PHPのバージョンが上がったことが最大の原因で、どうやらPHPのコード中に記載していたhtmlspecialchar()に関して、PHP 5.4.0以降では第3引数を省略した時の扱い(以前はISO-8859-1?今はUTF-8)が変わってしまったことにあるらしい。

ここの記述を省略していたことで、違う文字コードがやってきたときに返ってくる値がすっからかんになって空白行になってしまっていたというオチでした。