• ベストアンサー

<Perl>URLエンコードみたいに、一括でエスケープシーケンスをしたい

多くの、顔文字をCGIで表示するプログラムを作っているのですが、エスケープシーケンスだらけになって大変です。 $など出てきたときには、print<<"EOM" EOM でくくってもおかしな動作をしたり、¥¥などと出てきたときもおかしな動作になって困っています。 URLエンコードのように、何か、こう、サクット簡単に、文字を全部エスケープシーケンスに直してくれるbサイトかアプリはないでしょうかね?

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

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

print<<"EOM"; データ EOM と BLUEPIXYさんの提案されている print<<'EOM'; データ EOM では動作が違いますので問題はでないはずです。 前者ではデータ中に変数($~)やメタ文字(\~)などがあれば展開されますが 後者ではそれを行いません。 唯一の例外は EOM という終了を示す行と全く同じ行がデータ中にある場合だけです。 それがデータ中に存在するようなら終了を示す文字列をあり得ないような文字列に変えてやれば大丈夫だと思います。 print<<'MuimiNiNagakuShiteDataNoNakaniArawarenaiYounisuru'; データ MuimiNiNagakuShiteDataNoNakaniArawarenaiYounisuru

mizuki_ff
質問者

お礼

回答いただきありがとうございます。 "と'では意味が違っていたんですね。知りませんでした。 わざわざ、質問内容から読み取っていただいて、ご教示いただきありがとうございました。 無事解決いたしました!!

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>もし、この顔文字の中に何かの続き文字で、print<<'EOM';という文字列が入っていた場合うまくいきません。 顔文字に、どうしてそのような文字列が入るのかはわかりませんが、 念のためテストしてみました、そのまま出力されるようです。 うまくいかない状況をもう少し補足してください。

mizuki_ff
質問者

お礼

回答いただきありがとうございます。 'と"を同じものだと思っておりました。 せっかく、ご教示いただいたのに、すみませんでした。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

print<<'EOM'; としてみたらどうでしょう

mizuki_ff
質問者

お礼

回答いただきありがとうございます。 残念ながら、それでは解決しません。 例えばですが、もし、この顔文字の中に何かの続き文字で、print<<'EOM';という文字列が入っていた場合うまくいきません。 今のところ、まだ原因は分かりませんが、多分、変数を勝手に生成しているようで困っています。 無理やり置換でやればできなくはないのですが、顔文字表を書き直すたびに置換作業するのはとても骨が折れます・・・

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

HTMLサニタイズ用モジュールがCPANにありますので、そちらを利用してみては。

参考URL:
http://www.google.co.jp/search?hl=ja&q=html+sanitize+site%3Asearch.cpan.org
mizuki_ff
質問者

お礼

回答いただきありがとうございます。 残念ながら、私には高度すぎてさっぱり・・・ pmがプログラムということは分かるのですが使い方がさっぱりで・・・すみません。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

エスケープ文字「\」の意味をご存知ないようですね。 「$」や「"」や「'」など、特殊な文字が出てきたら、とにかく、前に「\」を足してみましょう。 「$$(`o')$$」⇒「\$\$(\`o\')\$\$」 もちろん「\」を「\\」にするのもお忘れなく(同様に「\\」は「\\\\」になります)

mizuki_ff
質問者

補足

回答いただきありがとうございます。 お察しの通り、Perlなどプログラムはほとんど知らないのですが、今回文字数でいうと500文字くらいありまして、その全てをひとつづつ調べてエスケース文字をつけるのはとても大変なため、簡単に、つける方法がないかと探しています。 もし、ご存知でしたら、宜しくお願い致します。

関連するQ&A