• ベストアンサー

javascript + php でエラー

エラーを取り除くことができず、困っています。 助けてください。 下記のようなコードで、PHPからjavascriptに文字列を渡しているのですが、 文字列に改行コードがあるとエラーになってしまいます。 (改行コードがない場合はエラーはでません) 文字コードはEUC-JP、改行はLFとしています。 エラーの原因と、対策を教えてください。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function sampl(str) { alert(str); } //--> </script> </head> <body> <form method="post" action="#"> <?php $str = "テスト\n改行あり"; ?> <input type="button" value="実行" onClick="sampl('<?=$str?>')"> </form> </body> </html>

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

  • ベストアンサー
  • mflow
  • ベストアンサー率63% (42/66)
回答No.2

こんな感じでしょうか。 <?php $str = 'テスト 改行あり'; echo str_replace("\n",'\n',$str); ?>

xyz_1990
質問者

補足

ご回答ありがとうございます。 サンプルのコードでは上手くいくのですが、 DBから変数を呼出した場合だと、エラーが消えません。 (ご教授いただいた方法だと、改行後に\nが追加されますが、改行自体はなくなりません。) ご教授頂いた方法 str_replace("\n",'\n',$str); の意図がよくわからないのですが、教えていただけないでしょうか?

その他の回答 (3)

  • yasu6578
  • ベストアンサー率0% (0/1)
回答No.4

間違えました。。 ereg_replaceではなくstr_replaceです。 <?php $str = "テスト\n改行あり"; $str = str_replace( "\n" , "\\n" , $str); ?>

xyz_1990
質問者

お礼

まとめて、お礼を申し上げます。 エラーの原因が、データベースの変数の取り扱いにあるようです。 javascriptよりもphp側の問題の用ですので、phpのカテゴリに質問を設定しなおしました。

xyz_1990
質問者

補足

何度もありがとうございます。 やはり、サンプルでは上手くいくのですが、DBを使うとうまくいきません。 DBの変数扱いに問題があるのかもしれません。

  • yasu6578
  • ベストアンサー率0% (0/1)
回答No.3

こちらでいかがでしょう? <?php $str = "テスト\n改行あり"; $str = ereg_replace( "\n" , "\\n" , $str); ?> 「\n」を「\\n」に変換します。 そうするとjavascriptのエラーが発生しません。

xyz_1990
質問者

補足

ご回答ありがとうございます。 No.2と同じ結果でした。 (サンプルのコードでは上手くいきますが、実際DBからの変数を使うとうまくいきません)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

エラーがでているというのにエラーメッセージの情報がないですね。 (問題解決に結びつくすごく重要な情報なのですが。) エラーの原因は、phpの処理結果が以下のようになっているためではないでしょうか? <input type="button" value="実行" onClick="sampl('テスト 改行あり')"> これだと、文字列が 「'テスト」 で不完全になっているので JavaScriptのエラーがでると思います。 修正方法は、例えば以下のような結果が得られるようにphpを書くことです。 <input type="button" value="実行" onClick='sampl("テスト\n改行あり")'>

xyz_1990
質問者

補足

ご回答ありがとうございます。 まず、エラーメッセージは unterminated string literal と出ています。 (失礼いたしました。) なお、ご指摘のように、直すとエラーは回避できました。 ただ、実際には、データベースから文字列を取り出し、それをjavascriptに渡したいので、私が直面しているケースでは、ご指摘のような方法はとれません。 文字列(改行コード)を変換してやればいいのだと思いますが、方法がわかりません。 対策方法があれば、引き続き教えてください。

関連するQ&A