• ベストアンサー

自動的にエスケープを付けて別ファイルに書き出す!

テキストファイルに含まれている、 「申込」、「表示」、「飯能」などの バックスラッシュが含まれている文字に 自動的にエスケープ\を付けて別ファイルに書き出すには、どうしたらよいのでしょうか?

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

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

素直に、EUC漢字コードを利用すれば良いような気がしますが。。。 漢字をプログラムで認識させる。と言うのは結構厄介です。人間は全体を一度に見ることができるので、それを漢字と認識しますが、プログラムでは左端から1バイトづつ見ていくので、それが漢字の一部分なのか、そうでは無いのかが、判断しにくいからです。 一文字づつ区切って見るのが一番手っ取り早いかな。と思います。 $s = '飯能申込表示'; $r = &add_yen($s); print $r. "\n"; exit(0); sub add_yen { my($s) = @_; my($r, $i, $c); $r = ""; for $i (0 .. length($s)-1) { $c = substr($s, $i, 1); $r .= $c; if ($c eq "\\") { $r .= $c; } } ($r); } ただし、この処理は、漢字を漢字として認識させる処理を省いて、簡便な処理にしてあるので、完全なものでは無いと思います。(全角文字と半角文字が混在すると、誤動作する可能性があると思います。) また、 $s = '飯能申込表示'; は定義できても、 $s = '申込表示飯能'; は定義できません。(能の2バイト目が \ なので、' がエスケープされてしまう。) ファイルから取り込む分には問題ないと思いますが。 初めにも書きましたが、この様な面倒な問題に拘るより、EUC-JP でコードを書いてしまった方が何倍か楽になる様な気がします。

goonejp
質問者

お礼

ありがとう御座います。 おおっ! そうなのですか! EUCコードには、\の混じる文字が無いのですね!!! 感動です! それも私は初耳なので、非常に勉強になります。 独学とはなんと遠回りなものか、パソコン利用歴13年にして、この有様。 (ついでに、いまだにブラインドタッチ出来ず、かな打ちなので、ローマ字打ちできません。トライしたりしていますが、挫折して…。ついでに、かな入力とローマ字入力の切り替えがAlt+平仮名で出来ることを最近知りました。) しかし、それだけにシフトJISからは離れがたいものがあり、ご教示いただいたコードを試させていただきましたら、ファイルから取り込み、ファイルに書きだす場合は、半角が入っても正しく動作します。 …というより、全部半角でやっているからこそ、正しい処理が出来るのかな??? > 能の2バイト目が \ なので、' がエスケープされてしまう。 多分、それが正しいのだと思います。どうやっても、漢字の真ん中には、\は入れられませんし、入れても、同じ\\ですから、後に入れても先に入れても同じで、次の文字がおかしくならないようにしたのでよい場合もあると思いますので…。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

    • ベストアンサー
    • PHP
  • Jedit X でエスケープ文字の置換に関して

    Jedit X 2.03 を利用しています。Mac の環境は Mac OS X 10.5.4 になります。 Jedit X にて、エスケープ文字を置換したいと思っています。 具体的には、垂直タブ(\v)を改行(\n)に変換したいと思います。 少し調べた所、Jedit X では、エスケープ文字の場合、¥(円マーク)では無く\(バックスラッシュ)との事でしたが、Jedit X で、半角英数で\vと入力しても、認識しませんでした。 最終的には、不可視の垂直タブ及び、改行(パラグラフブレーク)を表示させ、垂直タブ及び、改行(パラグラフブレーク)の記号をコピーする事が出来ましたので、置換をする事は出来ましたが、純粋にエスケープ文字を認識させて、置換させる事は出来ないでしょうか。 エスケープ文字の置換は頻繁に行いませんが、Mac で他に良いエディターが有れば合わせてアドバイスを頂ければ嬉しく思います。 ## safari の画面上では、バックスラッシュを入力すると\になる為、上記質問では全角のバックスラッシュ(\)を記載しています。

    • ベストアンサー
    • Mac
  • XPathの関数「text()="value"」のダブルコーテーションをエスケープする方法は?

    お世話になります。 現在、XPathに関するプログラムを制作しています。 入力されたXPathを解析し、解析した内容に応じて特定の処理をさせるというものなのですが、text() 関数の解析で躓いています。 text()="value" ここまではわかります。 text()='value1"value2\value3' 上のケースでは、どのように記述すればいいのでしょうか? シングルコーテーションで括るという解では、シングルコーテーションとダブルコーテーションが混在している場合に対応できません。 そのプログラムではクオート文字をダブルコーテーションに限定しているので、ダブルコーテーションのエスケープ方法を探しています。 現在はバックスラッシュ(\)によるエスケープ処理で対応しています。 text()="value1\"value2\\value3" しかし、Firefox拡張「XPath Checker」で調べるとバックスラッシュによるエスケープ処理は働いていないため、 この方法は正しくない気がしています。 プログラムとしては問題なく動作していますが、XPath記法に沿っていないのは落ち着きません。 何かヒントとなる情報はないでしょうか?

    • ベストアンサー
    • XML
  • 文字列中のシングルクォートにエスケープシーケンスは必要?

    C言語でダブルクォートで囲まれた文字列内で使われる、「\」で始まるエスケープシーケンスがありますよね。例えば、 「\n」 ⇒ 改行 「\t」 ⇒ タブ 「\"」 ⇒ ダブルクォート 「\\」 ⇒ バックスラッシュ などですが、C言語のリフェレンスを見ると「\'」(シングルクォート)や「\?」(クエスチョンマーク)なども載っていました。でもこれらの文字は、実際はエスケープシーケンスを使わなくても、ちゃんとコンパイルされ表示もされます。 「'」や「?」をC言語の文字列内で使うには、公式には「\」が必要なんでしょうか?

  • HTMLタグのエスケープ文字をタグに戻す方法

    JavaのBufferedReaderクラスを使用して HTMLファイルを1行ずつ読み込んでまた、別のファイルに出力したところ HTMLファイル内では <br /> と表示されているところが出力ファイルでは &lt;br /&gt; というようにエスケープ文字で出力されてしまいました。 タグをそのまま出力したいのですがエスケープ文字で出力されないようにするためには どのようにすればよろしいでしょうか。

    • ベストアンサー
    • Java
  • エスケープしたくない、けど、したいのもある

    とあるテキストデータ(.txt)を読み込み、それを表示するスクリプトをPHPで作りました。 その際、もしテキストデータにHTMLタグが入っている場合、そのまま出力させて、タグが有効になるようにしています。 (というかテキストを何も処理せずそのまま出力するだけ) (セキュリティ的には、テキストデータは信頼できる自サイトの同一ディレクトリに置いてあるものからしか読み込ませないようになっています) しかし、今度は逆に、もしそのテキストデータに「<hoge>」などの文字がふくまれていた場合、ブラウザはそれをタグと認識し、見えない表示になります。 本当は見えるようにそこは「&lt;hoge&gt;」と出力してほしいわけです。 かと言って、 echo htmlspecialchars($txt, ENT_QUOTES|ENT_HTML5, "UTF-8"); などエスケープして出力すると、今度はHTMLタグとして出力させたい「<br>」なども「&lt;br&gt;」として出力されてしまい都合が悪いです.. ようは、 「こんにちは<hoge><br>ほげ」 という文字列のテキストを、 「こんにちは&lt;hoge&gt;<br>ほげ」 と出力してほしい.. もちろんテキストは「hoge」であるとは限りません。 何かよい解決方法はないでしょうか? ご教示頂けましたら幸いです。

    • ベストアンサー
    • PHP
  • WordPressで、ブログタイトルの「'」がエスケープされてしまいます

    WordPress2.2.3でブログを運営予定です。 ブログタイトルに、「~'s blog」というように、「'」を使いたいのですが、 管理画面の各種設定>一般設定>ブログ名に、「'」を入力すると、 'が\'とエスケープされてしまい、~\'s blogとなってしまいます。 ※実際は\でなくバックスラッシュ これを回避する方法はあるのでしょうか? 記事中で、勝手にエスケープされてしまうのは、 Kill WPTexturizeプラグインなどで対処できるようなのですが、 ブログタイトルのエスケープは、そのプラグインでは解除できず、悩んでいます。 formatting.phpのwptexturize()が怪しいと思い、 置き換えている部分をコメントアウトしたりしたのですが、 変わらなかったので、wptexturizeは通ってしていない気もします。 対策があれば、教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数のファイルに同じ文字列を自動入力するバッチ

    複数のテキストファイルに同じ文字列を入力して保存するバッチを作成したいです。 テキストファイル1.txt テキストファイル2.txt テキストファイル3.txt 上記3つのテキストファイルがあったとしてバッチを起動すると 同じ文字列のデータを自動的に入力したい。 自動入力する文字列:あいうえお そもそも実現可能なのかもよくわかっていませんが ご教示いただけますと幸いです。

  • バックスラッシュと円マーク

    バックスラッシュと円マーク OS10.5ですがテキストエディタなどで 文字入力の際にトラブルを抱えています。 マッピングを変え強制的に¥の位置でバックスラッシュがでるように設定しています。 しかしいくつかのソフトでは やはり円マークの表示となり困っています。 回避策はありますでしょうか。

    • ベストアンサー
    • Mac
  • 特殊文字のエスケープについて

    今PHPを勉強しています。全くの初心者なので、本を頼りにやっているのですが、エスケープの所がうまく行きません。分かる方がいたら教えて下さい。お願い致します。 <?php //データを受け取る $text1 = @$_POST["text1"]; //特殊文字をエスケープする $text2 = htmlspecialchars($text1); //エスケープ後の値を表示する echo "<p>エスケープ後:".$text2; //「ENT_QUOTES」を指定したとき echo "<p>ENT_QUOTES:".htmlspecialchars($text1, ENT_QUOTES); //「ENT_NOQUOTES」を指定したとき echo "<p>ENT_NOQUOTES:".htmlspecialchars($text1, ENT_NOQUOTES); ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1" value="<?php echo $text2?>"></td> <td><input type="submit" value="送信" name="sub1"></td> </tr> </table> </form> を実行して、<b>"太字"</b>を送信すると「"」の前に「\」が入ってしまいます。本では、<b>"太字"</b>のまま表示されるようなんです。。 文字コードはEUCで保存しています。

    • 締切済み
    • PHP
このQ&Aのポイント
  • 親戚に統合失調症を患う50代男性がいます。病気の進行により攻撃性が強くなり、間接的に非難されることもあります。
  • 男性は入退院を繰り返し、何度も警察沙汰になっています。また、離婚経験や借金などもあり、生活が苦しいようです。
  • 関わりたくない人物だと思いますが、万が一こちらに迷惑をかけてこないか心配です。統合失調症患者との関わり方についてアドバイスをお願いします。
回答を見る