実体参照に変換するやつ作りたい
来週まで忙しくなりそうなんだけど、せっかくPHP勉強してんのに少し休むとすぐに忘れてしまいそうなので、ちょっとでも何かやって記憶を繋いでおかなきゃ・・・と思った。ちょうど手があいたので、ちょっと勉強する。
こういうブログを書いてるとソースをエントリに記載する事も多いのですが、一旦実体参照に変換してから書かなきゃならないじゃないですか。そういうのパパっと変換できるツールを提供してるサイトもいろいろあるんですが、それ、PHPでどうやったらいいんかな、というのが今日の課題。以前コメント欄にソース書いてくださった方で「<」や「>」を含むソースを直接書いてくださったんだけど消えちゃってたみたいな事もあったような気がするので、その辺りでも使えたらいいな、と。
変換するものを考える
考えるって大袈裟だけど、とりあえず変換せねばならんのが「& → &」「< → <」「> → >」「" → "」この辺り。htmlspecialcharsでエンティティ変換するようなやつってこと。
文字列を置き換える
str_replace関数は検索文字列に一致したすべての文字列を置換する関数。つーことでコレを使う。正規表現の関数とどっちがいいんだー?って迷ったけど、なんか・・・そんなに高度なことしなくていい気がしたのでこっちで。
テキストエリアに入力されたものをボタン押したら置き換えて表示っていう風にしたい。で、やってみた。
2パターン考えた
htmlspecialcharsでまず変換バージョン
入力されたものを変数に入れてhtmlspecialcharsでまず変換。それから置き換えたいものを個別にstr_replaceで置き換えるっていう風に考えたバージョン。
str_replaceでいきなり置き換えるバージョン
なんで2パターンあるのよっていうのは、なんか・・・こういうのって「とりあえずhtmlspecialchars使わなきゃ」っていう初心者的危機感と「別にどうせ置き換えてるんだからhtmlspecialchars使わなくてもいいんじゃないの?」っていう疑問から。
苦戦したところ
$str = str_replace("\\&","&",$str);
$str = str_replace("\\\\","\\",$str);
なんか\マークスパイラルに陥って「ウガーーー」ってなった。何かムキになって夢中で\さんと戦って、今となっては何を考えていたのかも覚えてない。HTMLとかCSSのソースならいいんだけど、PHPのソースで「\"」みたいに\マークが絡むとエラいことになって「うわーー」って。で無我夢中になった対処結果が上。一応私がいろいろ試したソース達ではうまくこといってる。何か間違えてるんだろうなぁ。ちくしょう。冷静になってからもっかい考えよう。
<< htmlSQL すごかった。感動した。 | magic_quotes_gpcとstripslashes関数 >>
トラックバック
このエントリーのトラックバックURL:
http://redline.hippy.jp/cgi/mt/mt-tb.cgi/232