2012-01-24 16 views
0

誰もがこれについて考えているのですか?私はこれに取り組んでビットコウモリつもり引用符を引用する

$toReturn .= " 
    function addProd(pExists) 
    { 
    document.getElementById('products').innerHTML = \"<tr><td id='prod_n'><input type='text' size='10' maxlength='10' name='proj_n' id='prod_n' onchange=".chr(92).chr(34)."saveData(setSaveParams('ajaxSaveDataController.php', 'PROD', 'n'), this.value)".chr(92).chr(34)." value='"; 

$toReturn .="'></td> 

            <td id='prod_spec'> <textarea cols='60' name='prod_spec' id='prod_spec' rows='20' onchange=".chr(92).chr(34)."saveData(setSaveParams('ajaxSaveDataController.php', 'PROD', 'prod_spec'), this.value)".chr(92).chr(34)." value='";          

$toReturn .="'></td></tr>\" + document.getElementById('prodsTab').innerHTML; 

if (pExists == 0) 
{ 
    document.getElementById('prodsTab').innerHTML = \"<tr><th id='proj_spec_h'>Name</td><th id='proj_spec_h'>Spec</td></tr>\" + document.getElementById('prodsTab').innerHTML;"; 

を私はオフトピックタイプミスについて過多心配しないことを転写しました。

私はAjaxの機能を呼び出し、どのような私を離れて吹いていますが"秒でJavascriptを書くためにPHPを使用していますされ、ここで起こっていると'

だから、私は、返される文字列を書いていますPHP、そう"

にだことすべてが、その後、私は私が内部\"

を置くことができるように、そして、HTMLの引数は'

にすることができ、いくつかのinnerHTMLプロパティを書きたいです

これまではすべて問題ありません。

それで、私のonchangeコールはになるはずです。私の"はどこから来るのですか? "を使用すると、PHP文字列が終了します。 \"を使用すると、innerHTML文字列が終了します。だから私はこれを解釈するためにPHPを得ることになった

それは非常に乱雑で、それは私の頭を傷つけ始めている。

そして、それは2番目の$toReturnの後の空白行に失敗しています。これはわかりやすくするためです。

私はスタイルや何かの面で何か間違っていなければなりません。

ネストされた"はどのように扱いますか?

+0

なぜあなたは単にハードコードこのHTML、またはJSファイルでできないのですか?私は静的な文字列だけで動くダイナミックなデータは見ません。 – gilly3

+0

一度私がこの不具合を経験すると、それはよりダイナミックになります。そして、 '値'がそこにPHPで挿入されます。私はそのビットを明確にするために削除しました。 – JNAScarb

答えて

4

HEREDOC構文の使用を検討してください。 http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

<?php 

$my_string = <<<EOD 
    <script type="text/javascript"> 
     var x = "this string has a ' known as a single quote!"; 
    </script> 
EOD; 


?> 

この構文の利点は、自由に引用符をエスケープせずにHTMLやJavaScriptを記述することができることです。ここで

更新

は、ヒアドキュメントにはほとんど詳細です。

まず、heredoc構文に関連する最も一般的なエラーは、空白によって引き起こされます。 HEREDOC構文には開閉記号が必要です。上記の例では、識別子としてEODを使用しています。開かれた識別子の後ろに空白がなく、終了識別子が新しい行にあり、その前に空白がなく、識別子とセミコロンの間に空白がないことが重要です。

あなたは識別子としてEODを使用する必要はありません。もっと説明的なものを使うことができます。 私は、コードブロックを記述する識別子を使用するのが好きです。

<?php 

$html = <<<HTML 
    <html> 
     <head> 
      <title>Example html</title> 
     </head> 
     <body> 
      <p class="paragraph">This is my html!</p> 
     </body> 
    </html> 
HTML; 

$javascript = <<<JAVASCRIPT 
    <script type="text/javascript"> 
     var helloText = "Hello, my name is Jrod"; 
     alert(helloText); 
    </script> 
JAVASCRIPT; 

?> 

heredoc構文の中で変数を使用するには、コード内の変数を中括弧で囲む必要があります。

$widget = <<<WIDGET 
    <p>Good Morning {$name}</p> 
WIDGET; 
4

ダブルエスケープされた二重引用符を使用しますこれは印刷されます。このように

\\\" 

を、それがシンプルになり、二重引用符(\")を脱出し、それがinnerHTMLプロパティになりません。

+0

ところで、@ Jrodの示唆するように、HEREDOC構文の使用を検討してください。 ;) – entropid

+0

ta、はい、それについて疑問に思った – JNAScarb

3

\\\"などの引用符を引用してみましたか?

これは、通常、\"になり、第2のステップの後には、"となります。

とにかく、(phtml)コードの(html)コード内の(javascript)コードを生成するのは面倒です。テンプレートシステムの使用、または懸念の分離を検討してください。

1

もう一つのトリックはのonchangeにそれらを入れる前にJavaScriptで文字列を定義して、そこ単一引用符を使用して

<script type='text/javascript'> 
<!-- 
var a = 'a'; 
var b = 'b'; 
--> 
</script> 
... 
<... onchange='function(a, b)'>