• ベストアンサー

PHPのエスケープシーケンスについての質問です。

PHPのエスケープシーケンスについての質問です。 下記のコードで改行コードを<br>に置換し、結果を画面に出力しました。 $text = "あいうえお\\nかきくけこ\nさしすせそ"; $text = str_replace("\n", "<br>" , $text); echo $text; 実行結果は下記になりました。 あいうえお\\nかきくけこ さしすせそ 私の予想では、\\nが\<br>に置換され、下記になるかと思いました。 あいうえお\ かきくけこ さしすせそ なぜ\\nは\<br>に置換されず、そのままだったのでしょうか?

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • duron
  • ベストアンサー率77% (73/94)
回答No.1

これ実行結果は あいうえお\nかきくけこ さしすせそ になりませんでしたか? \\nですと1個目の\が2個目の\をエスケープしており、2個目の\はエスケープされる側ですのでnに対しては何も影響を与えないです。 例えば\をエスケープするとAという文字に相当、nをエスケープするとBという文字に相当するとします。 すると1行目で$textに設定されるのは"あいうえおAnかきくけこBさしすせそ"となります。 2行目での処理は"B"を<br>に書き換えろ、なので当然Anは変換の対象外です。 最終的に出力されるのは"あいうえおAnかきくけこ<br>さしすせそ"となります。

nanairo777
質問者

お礼

ありがとうございます。 疑問が解けました。

関連するQ&A

  • phpの<br>\nと\nとエスケープシーケンスについて

    現在、phpを学んでいるのですが、いきなり"<br>\n"と"\n"の違いがわからなくて困っています。\nはエスケープシーケンスで改行を意味するのですよね?<br>も改行を意味するから・・・わざわざダブルクォーテーションの中に<br>を書かなくても良いのでは・・・ と思うのですが・・・違うのでしょうか!? またエスケープシーケンスについてなのですが、 ¥を付けて表す特殊文字がエスケープシーケンスなのですね。 しかし、シングルクォーテーション内では「¥’」と「\\」だけが使える。 ダブルクォーテーション内では記述すると画面に表示されないということですが・・・。 ではエスケープシーケンスっていつ使うのですか?使い道がないような気がするのですが・・・・。 使えるのは、シングルクォーテーション内の「¥’」と「\\」だけになるのでは・・・・。 そのへんのところを教えてください。

    • ベストアンサー
    • PHP
  • PHPです2つのスクリプトの相違がわかりません

    PHPですが、以下の2つのスクリプトで同じ結果がでると思ったのですが現実は違いました。 henkan.php <html> <body> <?php $uketori=$_POST['UKETORI']; $uketori=str_replace("pen","pencil", $uketori); $uketori=strtoupper($uketori); print "$uketori"; ?> </body> </html> henkan2.php <?php $str=$_POST['UKETORI']; echo str_replace("です。","だよん。", $str) . "<br>\n"; echo "<br>\n"; echo mb_ereg_replace("です。","だよん。", $str) . "<br>\n"; echo "<br>\n"; ?> フォームに です。 という文字を入れたら変換されて だよん。 と表示さしたいのですが、上の2つで相違がでました。なぜなんでしょうか。 henkan.php では変換されませんでした。 henkan2.php では変換されました。

    • ベストアンサー
    • PHP
  • 携帯電話での<br>の変換

    iモード(docomo)で 文字列 $text ="りんご<br>バナナ"を textarea 内に入れたくて $text = str_replace("<br>" , "\n", $text) としましたが、textarea 内の表示は「りんご<br>バナナ」となってしまいます。 $text = str_replace("<br>" , "\r\n", $text) $text = str_replace("<br>" , "\r", $text)と記述してみましたが、 textarea 内の表示はすべて「りんご<br>バナナ」となってしまいます。 textarea 内の表示を 「りんご  バナナ」 にしたいのですが、どんなコードに変換したらいいのでしょうか? また、auとsoftbank では、どんな変換をすればいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 空行を<br />に置換したい

    今、ファイルの中身を読み込み、それを処理したいものがあります。 処理する過程で、 空行(スペース、タブしかない行も含む)を<br />に置換したいのですが、上手くいきません。 ex) 処理前 あいうえお ←半角スペース2個あると過程 か きくけこ さしせそ 処理後 あいうえお <br /> か <br /> きくけこ <br /> さしすせそ 現在、やってるスクリプトです。 $str = preg_replace("/^\s$/", "<br />", $str); これだと出来ません・・・。 (このままだと<br />に置換するとその行が改行され ませんでしたね><;) どうすると実現出来ますでしょうか?ご教示下さい。

    • ベストアンサー
    • PHP
  • エスケープ文字にstr_replaceが効かない

    フォームで送信された文字列のうち、str_replace関数を使って半角記号を全角記号に置換したいのですが、一部のエスケープ文字が含まれている文字列の置換が上手くいきません。 ソースは以下に記しますが、現状では、"(ダブルクォート)は\&quot;、&(半角アンド)は&amp;と置換されてしまいます。 この場合であれば、”(全角ダブルクォート),&(全角アンド)と出力させたいのですが・・・ どなたかお気づきの点ありましたらご教示宜しくお願いします! ===============ソースコード================================= <?php $system = ""; if (isset($_POST["submit"])) { $system = htmlspecialchars($_POST["system"], ENT_QUOTES); $system = mb_convert_encoding($system, "EUC-JP", "SJIS"); $system = str_replace('&', '&', $system); $system = str_replace('"', '”', $system); $system = str_replace('あ', '”', $system); $_SESSION["system"] = $system; } $str = <<<STRING <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <form method="post" action="{$SERVER['PHP_SELF']}" enctype="multipart/form-data" > <textarea name="system" cols=40 rows=5 wrap=soft>{$system}</textarea> <input type="submit" name="submit" value="送信"> </form> ----------------------------------------------------------<br> {$_SESSION["system"]} </body> </html> STRING; $str = mb_convert_encoding($str, "SJIS", "EUC-JP"); echo $str; ?> ============================================================ ちなみに、『あ』→『”(全角ダブルクォート)』と、正しく置換されます。

    • ベストアンサー
    • PHP
  • PHP初心者です。コード内容を教えてください。

    PHP初心者なので以下のコードをお教えいただき たいです。これは改行について解説しているところに 出てきた例文です。 質問1 コードの1を実行した結果がブラウザ表示だと改行なし ソース表示だと改行ありで表示されるのですが、それがよく わかりません。'で文字列を囲うとそのまま出力されるため htmlで<br>されないというのはわかるのですが、ソース 表示が改行されているのが分かりません。ソースで改行 するには/(逆)nやPHP_EOLを使わなければ改行できないので はないでしょうか? (PHPコード1) $str = '改行を削除して処理します。<br> ダブルクオートじゃないと改行文字は扱えません。'; $str = str_replace(array('<br>','', '$str); echo $str; 質問2str_replace関数がありますが、この手のわからない 関数をリファレンスで引くと str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed のように説明には書いているのですが、str_replace("2","3","1"); 1の中の2すべてを3に置き換える。これはわかります。しかし、 説明例文に記載のmixedやら[, int &$count ] ) : mixedはよくわかりません これは何なのでしょうか? 長くなりましたがどうか回答お願いします。

    • ベストアンサー
    • PHP
  • preg_replaceがうまくできない

    <br />を\nに置き換えてやりたいと思っています。 $a = preg_replace("<br\s/>", "\n", $a); としたのですが、 変換前が あ<br />い 変換後が あ< >い となりました。 <>が括っているものとしてとられているようでしたので、次のように\でエスケープしてみました。 $a = preg_replace("\<br\s/\>", "\n", $a); そうしたら変換後は何も出てきませんでした。(データがなかった) そこで $a = preg_replace("/<br\s\/>/", "\n", $a); としてみたのですが、変換前と変わりませんでした \sを普通に半角スペースにもしてみましたし、括っているダブルクオーテーションをシングルクオーテーションに変えてもみましたが、結果は同じでした。 <br />全体を\nに変換するにはどうすればいいでしょうか。

    • ベストアンサー
    • PHP
  • 【PHP】半角「\」を全角「¥」に変換したい(2)

    同じ過去の質問を見つけたのですが、実行してみたところできなかったので相談させてください。【過去質問】:http://oshiete1.goo.ne.jp/qa3065958.html PHP Version 4.4.6、文字コードはshift-JISです。 アンケートフォームで入力された値を受け取り、半角「\」があれば全角「¥」に置換したいのですが、上手くいきません。 試したのは下記の方法です。 [1]  $str = preg_replace("\\", "¥", $str); [2]  $str = mb_ereg_replace("\\\\", '¥', $str); [3]  $str = preg_replace("/\\\\/", '¥', $str); 同じ質問をされている方は文字コードが「UTF-8」で上記の[2][3]で上手くいっているようなので、文字コードを変更すればいいのかもしれませんが、現在あるフォームを修正しているので、できればshift-JISでしたい・・・と模索中です。 また、サイトの性質上「○○円の~」というようなメッセージが多いので、¥を削除することはできるだけ避けたいです。 ご指導をお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの文字列をJavascriptの変数にする

    PHPの変数に格納された文字列を、直接Javascriptの変数の一部として格納しようと考えています。 例:) <script> var txt = "<?php echo $text; ?>"; </script> しかし、$textにダブルクォーテーションなどの文字が含まれていると、スクリプト全体が破綻します。今のところ、PHPの中で、問題を起こしそうな文字列を変換するように処理しています。 例:) $text = str_replace("\\", "\\\\", $text); $text = str_replace("\"", "\\\"", $text); $text = str_replace("\n", "\\n", $text); これよりもスマートな方法(たとえば用意されている関数を使うなど)がありますでしょうか。

    • ベストアンサー
    • PHP
  • TEXTAREAに書いた改行コードを正しくBRに

    置き換えたいのですが、<br>がたくさん増えてしまいます。 下記のように書き換えています。 foreach ($data as $key => $value) { $data[$key] = preg_replace("/^(\s| )+$/", "", $data[$key]); $data[$key] = strip_tags($data[$key]); $data[$key] = stripslashes($data[$key]); $data[$key] = mb_convert_kana($data[$key], "KV"); $data[$key] = htmlspecialchars($data[$key]); $data[$key] = str_replace("\r", "<br>", $data[$key]); $data[$key] = str_replace("\n", "<br>", $data[$key]); $data[$key] = mysql_escape_string($data[$key]); } 別途↓も入れましたが、1改行コードにつき2個<br>がつきます。 文字コードはutfです。 $data[$key] = str_replace("\r\n", "<br>\n", $data[$key]); 正しく改行コードを<br>に変換できないでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう