- ベストアンサー
<Perl>URLエンコードみたいに、一括でエスケープシーケンスをしたい
多くの、顔文字をCGIで表示するプログラムを作っているのですが、エスケープシーケンスだらけになって大変です。 $など出てきたときには、print<<"EOM" EOM でくくってもおかしな動作をしたり、¥¥などと出てきたときもおかしな動作になって困っています。 URLエンコードのように、何か、こう、サクット簡単に、文字を全部エスケープシーケンスに直してくれるbサイトかアプリはないでしょうかね?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
print<<"EOM"; データ EOM と BLUEPIXYさんの提案されている print<<'EOM'; データ EOM では動作が違いますので問題はでないはずです。 前者ではデータ中に変数($~)やメタ文字(\~)などがあれば展開されますが 後者ではそれを行いません。 唯一の例外は EOM という終了を示す行と全く同じ行がデータ中にある場合だけです。 それがデータ中に存在するようなら終了を示す文字列をあり得ないような文字列に変えてやれば大丈夫だと思います。 print<<'MuimiNiNagakuShiteDataNoNakaniArawarenaiYounisuru'; データ MuimiNiNagakuShiteDataNoNakaniArawarenaiYounisuru
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>もし、この顔文字の中に何かの続き文字で、print<<'EOM';という文字列が入っていた場合うまくいきません。 顔文字に、どうしてそのような文字列が入るのかはわかりませんが、 念のためテストしてみました、そのまま出力されるようです。 うまくいかない状況をもう少し補足してください。
お礼
回答いただきありがとうございます。 'と"を同じものだと思っておりました。 せっかく、ご教示いただいたのに、すみませんでした。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
print<<'EOM'; としてみたらどうでしょう
お礼
回答いただきありがとうございます。 残念ながら、それでは解決しません。 例えばですが、もし、この顔文字の中に何かの続き文字で、print<<'EOM';という文字列が入っていた場合うまくいきません。 今のところ、まだ原因は分かりませんが、多分、変数を勝手に生成しているようで困っています。 無理やり置換でやればできなくはないのですが、顔文字表を書き直すたびに置換作業するのはとても骨が折れます・・・
- osamuy
- ベストアンサー率42% (1231/2878)
HTMLサニタイズ用モジュールがCPANにありますので、そちらを利用してみては。
お礼
回答いただきありがとうございます。 残念ながら、私には高度すぎてさっぱり・・・ pmがプログラムということは分かるのですが使い方がさっぱりで・・・すみません。
- chie65536
- ベストアンサー率41% (2512/6032)
エスケープ文字「\」の意味をご存知ないようですね。 「$」や「"」や「'」など、特殊な文字が出てきたら、とにかく、前に「\」を足してみましょう。 「$$(`o')$$」⇒「\$\$(\`o\')\$\$」 もちろん「\」を「\\」にするのもお忘れなく(同様に「\\」は「\\\\」になります)
補足
回答いただきありがとうございます。 お察しの通り、Perlなどプログラムはほとんど知らないのですが、今回文字数でいうと500文字くらいありまして、その全てをひとつづつ調べてエスケース文字をつけるのはとても大変なため、簡単に、つける方法がないかと探しています。 もし、ご存知でしたら、宜しくお願い致します。
お礼
回答いただきありがとうございます。 "と'では意味が違っていたんですね。知りませんでした。 わざわざ、質問内容から読み取っていただいて、ご教示いただきありがとうございました。 無事解決いたしました!!