大きな勘違い
むしろ高木さんの方がなんか勘違いがある気がします.
■マルチバイト文字の問題
(略)
PHPならばaddslashes()といった関数を使って、フォームから受け取った入力値に含まれる「'」を「\'」と置換するなどの処理をしてSQLインジェクションによる攻撃を回避しようとするかもしれない。(略)
ポイントとなるのは「\x97'」の部分で、これの「'」をエスケープするために「\'」と置換すると「\x97\'」となる。(略)
\x97\x5C\x27 → 予'
こんなのは PHPのバグでしょ。エンコーディングがShift_JISの文字列を addslashes() するときに、Shift_JISとして処理していない addslashes() のバグ。なぜそれを言わないで、Webアプリプログラマの責任であるかのように書くわけ?
そして結論部分はこう。
PHPでマルチバイト文字を含むスクリプトはたまたま動いているという位の認識のほうが正しいです.
マルチバイトについてわかんないISO-8859-*圏の人が書いたエンジンを含む言語仕様のものをマルチバイトで勝手に使う人が居るだけですよ.
Shift_JISでaddslashes()が正しく(一般的な意味で意図したように)動作する設計なんてされてないし,どこにもそういった挙動を含む仕様を書いたドキュメントはないでしょう.
PHPはシングルバイトを前提に書かれたエンジンで動いてるんですよ.
たまたまマルチバイトを考慮した内外のライブラリや関数群があるだけで.
これが仕様のバグというならこの視点だけで言うとPHP 6で解決する可能性(あくまで可能性)はあるようです.
本当にその実装が現実問題として正しいのかどうかはおいといて.