• ベストアンサー

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

  • IEでエラー

    FireFoxだと問題ないのですが、IEだとエラーが出ます。 原因がわからないので、助けてください。 IEには次のようなエラーが出ます。 ライン:5 文字:1 エラー:構文エラーです コード:0 ソースコードは以下の通りです。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> 。。。。 以上、すみませんが、よろしくお願いします。

    • ベストアンサー
    • HTML
  • 外部ファイルJS参照を全て消さないと「文字が正しくありません」エラー

    実に不思議なのですが、 以下のように4つのJSファイルをインクルードしているHTMLファイルを ローカルで開くと「文字が正しくありません」とスクリプトエラーが何回かでます。 ですが、script1~4.js の行を全てコメントアウトすると、エラーはでません。 1~4のどれかにエラーが含まれているのかと、一つ一つを外してみましたが、 どの行を外しても、やはり「文字が正しくありません」と出てしまいます。 ローカルの然るべきパスに1~4はあります。また、HTML同様、JSもEUCになってます。 何が原因なのでしょうか? <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>タイトル</title> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <meta http-equiv="content-script-type" content="text/javascript"> <meta http-equiv="content-style-type" content="text/css"> <link href="../css/style.css" rel="stylesheet"> <script src="../js/script1.js" type="text/javascript"></script> <script src="../js/script2.js" type="text/javascript"></script> <script src="../js/script3.js" type="text/javascript"></script> <script src="../js/script4.js" type="text/javascript"></script> </head>

  • meta要素の意味

    は何でしょうか? <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> を置かない場合の不都合は何でしょうか? これらをおく意味は何でしょうか?

    • ベストアンサー
    • HTML
  • FireFoxでfocus()が上手く動かない

    javascriptを使って、 フォームのテキストエリアの入力文字数をチェックし、 オーバーしていれば、アラートを出し、テキストエリアにフォーカスを移動させる。 ようにしようとしています。 IEでは動いてのですが、FireFoxだと上手くフォーカスが移動してくれません。 どこがまずいのか、教えてください。 コード <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 checkText(aText) { if (aText.value.length > 1) { alert('サイズオーバーです'); aText.focus(); } } //--> </script> </head> <body> <form method="post" action="#"> <input type="text" name="fmTitle" onBlur="checkText(this)"> <input type="text" name="dummy"> </form> </body> </html>

  • javascriptエラーについて教えてください。

    メアドを直接ソースに書かないようにするためのjavascriptで 外部ファイルを読み込むように実行してみたのですが、 「実行しましたが、ページでエラーが発生しました。」となり、 ライン:9 文字:1 エラー:‘CSAct’は宣言されていません。 コード:0 という内容のメッセージが出ます。 【HTML】 1:<HTML> 2:<HEAD> 3:<TITLE>情報</TITLE> 4:<meta http-equiv="content-type" content="text/html;charset=shift_jis"> 5:<LINK rel="stylesheet" href="××css" type="text/css"> 6:<script type="text/javascript" src="mail.js"></script> 7: <script type="text/javascript"> 8: <!-- 9: CSAct[/*CMP*/ '1320E1966'] = new Array(CSGoBack1); 10: // --> 11: </script> 12: </HEAD> 13: <body>~ 【メアドの箇所】 E-mail:<script type="text/javascript"><!--// add_AAA(); //--> </script> 【外部ファイル_mail.js】 function add_AAA(){ mail="AAA." + "BBB" + "@CCC.ne.jp"; document.write(mail.link("mailto:" + "AAA." + "BBB" + "@CCC.ne.jp")); } はっきり言ってjavascriptについて全然わかっていない超初心者です。。。 このソースもよさそうなところから引っ張ってきただけなので、 何をどう直していいのか、過去ログを見てもお手上げです。 どなたかエラーの原因がお分かりになりましたらご教授いただけないでしょうか? よろしくお願いします。

  • javascriptでselectboxのvalueを取得し、特定のv

    javascriptでselectboxのvalueを取得し、特定のvalue値により、「<input type="text" name~>」をブラウザに表示させたいのですが、やり方がわかりません。 javascriptについて素人です。 jQUERYを使用して、phpのようにif文を追加したらいけるのかなと思って下記のようにやってみたのですが、更新しないと変わりませんでした。。 どなたかお力を貸して下さい!どうか宜しくお願い致します! ========================================== <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> <meta name="robots" content="noindex,nofollow" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <script type="text/javascript" src="/admin/js/jquery-1.2.3.js" ></script> <script type="text/javascript"> $(function() { hogehoge = $("#abcdefg").val(); if(hogehoge !== '3'){ $('#hijklmn').hide(); } }); </script> </head> <body> <form method="post" action="/admin/~"> <select id="abcdefg"> <option value="1">aaaaaaaa</option> <option value="2">bbbbbbbb</option> <option value="3">cccccccc</option> </select> <div id="hijklmn"> 上のセレクトボックスが3の場合のみ、下記のフォームを表示させたい <input type="text" value="ああああああああ" /> </div> </form> </body> </html>

  • このソースどういう意味ですか【JavaScript】

    <HTML> <HEAD> <TITLE>JavaScript Sample</TITLE> <META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript"> </HEAD> <BODY> : <INPUT TYPE="button" VALUE="OK" onClick="~"> : </BODY> </HTML> このソースの中の <META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript"> の部分ってどういう意味ですか? 特にTypeとHTTP-EQUIVの部分については個別で詳しく知りたいです。 回答よろしくお願いします。

  • 「ページでエラーが発生しました」というエラー

    movabletype3.3を利用しております 最近ページエラーが発生します エラーの詳細は ライン:2 文字:8 エラー:'​www'​は宣言されていません コード:0 という物です このブログのメインページテンプレートの上部には 以下のような記述があります <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">​ <html xmlns="​http://www.w3.org/1999/xhtml"​ id="sixapart-standard"> <head> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>" /> <meta http-equiv="Content-Style-Type" content="text/css" /> どうすればこのエラーを解除できるのでしょうか? よろしくお願いします

  • スクリプトエラーについて

    メールフォームをmailformpro2というフリーのものをつかって、自分なりにホームページビルダーでカスタマイズしているのですが、最終的にプレビューしてみるとスクリプトエラーが出てしまいます。 エラーはこのようなものです。 ライン 2 文字  1 エラー 文字が正しくありません。 コード 0 2行目の一文字目ということだと思うのですが、何が原因かわかりません。 それともうひとつ、「お問い合わせ」というタイトルにしているのですが、これも原因がわからないのですが、プレビューをしてみると問い合わせの後に入力していない文字が出て「問い合わせ3.0.0」が表示されます。 これもスクリプトエラーが原因なのでしょうか? 以下が、その部分を含んでいると思われるHTMLです。 <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title>お問い合わせ</title> <meta name="revisit_after" content="7 days" /> <meta name="robots" content="ALL" /> <meta http-equiv="pragma" content="no-cache" /> <link rel="index" href="index.html" /> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> <link rel="stylesheet" href="commons/_include_wide.css" type="text/css" /> <meta name="Description" content="お問い合わせ" /> <!--[メールフォームプロ・参照ファイルここから]--> <link rel="stylesheet" href="commons/mailform.css" type="text/css" /> <script type="text/javascript" src="commons/jquery.js" charset="UTF-8"></script> <script type="text/javascript" src="commons/mfp.lang.js" charset="UTF-8"></script> <script type="text/javascript" src="commons/mfp.extensions.js" charset="UTF-8"></script> <script type="text/javascript" src="commons/mailform.js" charset="UTF-8"></script> <script type="text/javascript" src="postcodes/get.cgi?js" charset="UTF-8"></script> <!--[メールフォームプロ・参照ファイルここまで]--> </head> <body> <div id="wrapper"> <div id="header"> <h1 id="title">お問い合わせ <script type="text/javascript" src="commons/mfp.version.js"></script></h1>             <div>お電話でのお問い合せは ***-***-**** (月曜日~金曜日/午前9時~午後6時)までお問い合わせください。</div> </div>

  • HTMLの文字コードに関する素朴な疑問です!?

    HTMLの文字コードに関する素朴な疑問です!? HTMLファイルの書き方は、時とともに変遷してきました。 ■CSSの場合は、 <style type="text/css> ~</style> ↓ <style> ~</style> ■JavaScriptの場合は、 <script type="text/javascript> ~</script> ↓ <script> ~</script> ■文字コードの場合は、 <meta http-equiv="content-type" content="text/html; charset=UTF-8"> ↓ <meta charset="UTF-8"> 調べてみたところ、 ・日本では、「 UTF-8 」、「 Shift_JIS 」、「 EUC-JP 」の  3つがよく使われている文字コードである。 ・Shift-JISでの日本語1文字あたりのデータ量は2バイトだが、  UTF-8は1文字あたり3バイト必要である。  UTF-8よりもShift-JISの方が消費データが少なくて済む。 それにつけても、文字コードは何故 ・一本化しないのだろうか? ・一本化したら困ることでもあるのだろうか?

    • ベストアンサー
    • HTML

専門家に質問してみよう