• ベストアンサー

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

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

  • Perl
  • 回答数5
  • ありがとう数6

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

  • ベストアンサー
  • 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

  • PHPのエスケープシーケンスに関して

    PHPで文字列内で(※だぶるクオーテーションおよびシングルクオーテーション)使用するエスケープシーケンスについて、質問です。 PHPでは例えば \(※バックスラッシュ)を文字列内に含めるときバックスラッシュを二つ続けて入力して print "\\"; 上記の用に記述することになると思いいます。 ただ、上記とは違い  print "  \ "; と上記のようにバックスラッシュの前後にスペースをおいて print することでバックスラッシュをエスケープせずに出力させることができます。 本当はものすごく基本的な動作だと思うのですが、 ちょとこの動きが理解できません。 オライリー本をみてもバックスラッシュはエスケープしないといけないと 記載があります。 よろしくご教授ください。

    • ベストアンサー
    • PHP
  • エスケープ シーケンスが働かない

    MS-Dos用の古いプログラムですが、Windows-XPのDOS窓(と呼ぶのかな?)で実行すると、そのままエスケープシーケンス文字列が表示されてしまい、位置決めなどをしません。何かいい方法があれば、教えてください。

  • URLエンコードされたデータを戻すには

    POSTでCGIに渡す文字列はURLエンコードされていて、元に戻すにはデコードが必要ですが、もともとURLエンコードされたデータをデコードしたデータにできないでしょうか。 普通は、 読める文字→URLエンコード→CGIによる処理→URLデコード→読める文字 ですが、 もとのデータがURLエンコードされた状態だと、 URLエンコードされた文字→URLエンコード→CGIによるURLデコード→URLエンコードされた文字 となってしまいます。 たとえば、「%82%a0%82%a0%82%a0」というデータ形式から、「あああ」というデータを得たいのです。

  • シフトJISでURLエンコード

    IEのJavaScriptのescapeで日本語をURLエンコードすると、UnicodeでURLエンコードしてしまいますが、シフトJISのままURLエンコードする方法はないのでしょうか? 文字列のシフトJISコードを取得する方法でも良いのですが・・・。 まったく、Unicodeなんて役に立たないものを無理矢理標準にしようとしないで欲しいナ!>MS

  • Eclipseコンソールでのエスケープシーケンス

    EclipseでJavaのプログラムを開発しておりますが、Eclipseのコンソールでエスケープシーケンスを利用した時の振る舞いがSDKのJavaコマンドで直接動作させた時と違うのは何故でしょうか? 例えば以下の"\r"の動作はJavaコマンドの方ですと現在の行に上書きされる形で表示されます。 for( int i = 0; i < 10; ++i ) { System.out.print( "\r" + i ); Thread.sleep( 100 ); } 上記のコードをEclipseのコンソールを利用すると Eclipseのコンソールでは改行されて表示されてしまいます。 Eclipseでの開発が行い易いため、Eclipseのコンソールの動作をきちんと本家に合わせる設定方法等ご存知でしたら教えて下さい。

    • ベストアンサー
    • Java
  • フォーム送信とURLエンコードについて

    CGI&PHP初心者です。 フォームのデータ送信とURLエンコードについて、お尋ねします。 method="GET" のフォームで、検索フォームをつくりたいとおもっています。 日本語も含めた検索語をフォーム送信したいと考えていますが、 送信の結果、エンコードされずにそのままブラウザのURL欄に入力した日本語が表示されてしまいます。 (ただ、メモ帳などにURLをコピーペーストするとURLエンコードがされているようです。) googleでは検索結果のアドレス欄にURLエンコードされた文字列がでているが、 同じように検索結果のアドレス欄にはURLエンコードされた文字列をだしたい。 URLに日本語をださずにURLエンコードさせた文字列を表示させるには、 どうすればいいのでしょうか? 補足:できるかぎり検索処理が重くならないにしたいと思います。     開発環境PHP&MySQL     動作環境Chrome のバージョン 38.0

    • ベストアンサー
    • CGI
  • CGI.pmで日本語をURLエンコードするとおかしい

    CGI.pmで日本語をURLエンコードするとおかしくなります。 print($q->unescape($q->escape('あ')), "\n"); このコードは文字'あ'をURLエンコードしたものをURLデコードして表示するはずです。 すなわち'あ'と表示するはずです。 しかし実際には'a??'と表示されてしまいます・・・ 何か他の関数をかまさないといけないのでしょうか???

    • ベストアンサー
    • Perl
  • UTF8 URLエンコード

    こんにちわ。 PerlのCGIです。 今までEUCとsjisの変換連打で開発を乗り切って来たのですが、 さすがに古すぎて周りの人が迷惑らしいので、初めてUTF8を使うことになりました。 一応全部UTF8だけで作ろうと思います。 大まかな質問は三つです。 1:   UTF8は可変ビット (バイト単位ではない) の、   ほぼ全ての国際言語対応文字コードと言う認識で合ってますか? 2:   そうなってくると、データの送受信などのURLエンコードは不要ですか?必要ですか? 3:   もしURLエンコードが必要なら、一般に通用する変換方法を教えてください。   ついでなんでデコードの記述もお願いします。 すみませんがよろしくお願いします。

    • 締切済み
    • CGI
  • 文字化けとエスケープシーケンス

    OKWave様のサイト等で入力内容(回答)の送信が正常に完了し、問題の不在が確認された後に、バックで戻ってみますと、自分の入力の箇所ではなく、「質問文の箇所の【全体】」が『文字化け』の状態に陥る展開を過去に繰り返しで見ております。 それが頻繁に見られた頃には、直ぐにCcleanerとGlaryUtilitiesとで多くの要素の削除を行なっておりまして、そういう遣り方を慎むようになった途端に、そういう文字化けを殆ど見掛けなくなりました。 従いまして、若しかしますと、それが原因なのかも知れませんが、その仕組みを知りたいものですから、教えて下さい。 「【文字化け】が起きる際には、『エスケープシーケンス』が欠落しているのでしょうか?」

  • utf-8の文字列に対してURLエンコードを行なうには?

    最近 perlをutf-8で書き始めたのですが、文字コードではまっています。 cgiの内部から別のcgiへpostで全角文字を送る場合 URLエンコードしてから送ると思うのですが 文字コードがutf-8の時、どのようにURLエンコードしたら 良いのか分からず困っています。どなたかご存知でしょうか? ちなみに文字を受ける方のcgiでは以下の様にURLデコードしています。 $data =~ tr/+/ /; $data =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; 試用しているperlのバージョンはperl5.8です、よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう