• ベストアンサー

フォームで受け取った文章$strを

HTML形式に直すには $str=~s|\r\n|<br/>|sg; $str=~s|\n|<br/>|sg; $str=~s|\r|<br/>|sg; $str=~s|\s|&nbsp;|sg; $str=~s|<|&lt;|g; $str=~s|>|&gt;|g; $str=~s|&|&amp;|g; でいいのでしょうか? 何か抜けや誤りはないでしょうか? \tの変換ができないのが残念ですが空白にしたつもりです

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

テストすればすぐに間違いに気付くと思うのですが、& を文字参照(&amp;)に変換するのは、他の文字参照への変換より先でなければいけません。でないと、例えば < は &lt; に変換され、その後さらに &amp;lt; に変換されてしまいます。 また、問題があるわけではありませんが、置換オプションの s は全ての置換式で不要です。

guuman
質問者

お礼

ありがとうございます 順番が狂ってましたね 直しました

その他の回答 (1)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

順番についての質問ではないのかもしれませんが、順序が違うと意図しない変換が行われたり、行われなかったりします。 次のような順序で大丈夫だと思います。 $str=~s|&|&amp;|g; # <,>の変換の前に $str=~s|<|&lt;|g; # <br/>への変換の前に $str=~s|>|&gt;|g; # <br/>への変換の前に $str=~s|\r\n|<br/>|sg; $str=~s|\n|<br/>|sg; $str=~s|\r|<br/>|sg; $str=~s|\s|&nbsp;|sg; # 改行変換の後に

guuman
質問者

お礼

後先考えずにただ並べただけでした ありがとうございます