SSブログ

〜をPHPで使ったら文字列がごっそり消えた話。 [プログラミング]

〜と検索してもGoogleでは一般的にヒットしないのだが、「にょろ」とか「波線」とかするとやっと引っかかる。Googleも良し悪しだなと思うところがあるが、競合他社があんまりいないところで寡占状態で問題が出るところもあるのだろう。

PHPのWebシステムで、〜をWindowsからコピーして、VirtualBoxのCentOSに貼り付けた時に出た不具合があった。PHPに食わせるとその所の文字列が空っぽになる。初めはどの文字列が悪さをしているのかわからなかったが、HTMLの操作が悪いというわけではなく、PHPで操作するとその文字列が消えるらしかった。

CentOS上で〜を打ったら、文字列が全部消える現象は治まったのだが、何が悪かったのかいまいちわからずで、最終的には文字コードが関係しているのではないかということで納得した(あんまりちゃんと理解していないけど…)。とにかく〜が問題の原因となっていることはわかった。

状況としては、WindowsはShift-JISで扱っていて、CentOSの方は過去の資産だったためにeuc-jpを使っていた。というかWindowsもShiftJISかどうかはわからない。ShiftJISを扱うアプリも、API的には内部的にユニコードを使っていたりするらしいので、そこで問題が起こらないのかと思ってしまうのだが。現実としてはExcelの文字列をコピペして、VirtualBoxのペーストボードの共有で貼り付けたので、Windows側がUTF-8であるかも知れないけど、どちらにせよ文字コードが違うことは明らかであった。

波ダッシュ問題と言われているらしいが、かなり面倒な事になっていそうな感じではある。
http://blog.rodoku.net/article/28326088.html
https://qiita.com/kasei-san/items/3ce2249f0a1c1af1cbd2

とにかく文字コードによって扱いが違うということはわかる。OS間でのコピペが何やっているのかはわからないんだけど、一応見た目上は文字化けしていないので、表面上の処理はうまく行っているようだ。というか、そこで化けるようになっていれば、PHPに食わせて文字列が全部消えるみたいなことにはならなかったのだ。


文字コードが違うとなんで文字が消えるかという話になるのだが、PHPの関数が関係しているぽい。
https://qiita.com/CloudRemix/items/f1bc967984cf8bb121b5
https://php-archive.net/php/htmlspecialchars/

今回がhtmlspecialchars()が絡んできているかどうかまでは検証しなかったが、文字列が全て消えるという所は同じでした。というか、一部の不正な文字コードで変換する文字列が全部消えるとか、あまりにも切り捨てすぎな気がしませんかね。まぁそれでセキュリティホールになっちゃたまらんですが。

というかユニコードが一般的になって普通UTF-8でしょという世の中になっていますが、そこまでレガシーなシステムじゃなくてもEUCは残っていたりするので、まだまだ面倒なことになりそうな気がします。とりあえず文字コードが悪さをするということだけは覚えておきましょう。

タグ:PHP
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0