2

終了していない文字列定数

こんにちは、次のphpコードがあります。

$bodier .= "setInterval('updateClock(\"$date2\",\"clock$x\")',1000);";

私はこのように使用します:

<body onLoad="<?php echo trim($bodier) ; ?>">

それは生成します:

<body onLoad="setInterval('updateClock("2012-10-31 13:14:01","clock0")',1000);
setInterval('updateClock("2012-08-30 13:10:31","clock1")',1000);
setInterval('updateClock("2012-08-30 10:16:46","clock2")',1000);
setInterval('updateClock("2012-08-30 10:17:28","clock3")',1000);
setInterval('updateClock("2012-09-07 10:17:47","clock4")',1000);
setInterval('updateClock("2012-08-30 10:18:27","clock5")',1000);
setInterval('updateClock("2012-08-29 10:18:41","clock6")',1000);">

そしてそれはエラーを生成します:文字列定数を終了しません

私は何を間違っていますか

私はまた、PHPエコー部分の代わりにハードコードされたものとして出力を単純にpstingをコピーしようとしました

4

5 に答える 5

1

有効なhtml構文は

<body onLoad="setInterval('updateClock(\"2012-10-31 13:14:01\",\"clock0\")',1000);">

ほら、何も壊れません。

于 2012-08-27T11:44:59.653 に答える
1

「」は2つの異なる意味で使用しています。onload文字列定義内で使用しないでください。代わりに、setInterval行を使用して関数を定義し、onload属性に関数名をロードしてください。

(またはもちろん二重引用符をエスケープします!)

于 2012-08-27T11:45:00.957 に答える
1

エスケープされていない引用文字をコンテンツ文字列に入れることで、ここでよくある間違いをしています。次の例を参照してください。

"foo"bar"com"

次の文字列が文字列全体を閉じているため、文字列はfoo"bar"com実際にはそうであると言うことができます。あなたのコードと同じです。HTML パーサーは、onLoad スクリプトとして認識します。これは間違っています。foo""setInterval('updateClock("

編集: 一部の文字は HTML 用に特別なエスケープが必要であり、これらは と呼ばれentitiesます。htmlspecialchars()したがって、HTML で使用するために出力するものは何でも、安全な場所にとどまるために、常に関数を介して渡したい場合があります。

于 2012-08-27T11:43:59.387 に答える
0

phpコードで適切にエスケープし"ましたが、ブラウザによって解析されるHTMLでエスケープされていることも確認する必要があります。

を使用し&quot;ます。

このトピックは役立つ場合があります。

于 2012-08-27T11:45:17.607 に答える
0

"コード内でさまざまな場面で混乱しています'

次のようなことを試してください (関数内の文字列の代わりに関数を使用し、setInterval()JavaScript を HTML マークアップから分離することも含まれます):

<script>
function clockTimer( time, clock ) {
  setInterval( function(){ updateClock( time, clock ) }, 1000 );
}

function onLoader() {
  clockTimer("2012-10-31 13:14:01","clock0");
  clockTimer("2012-08-30 13:10:31","clock1");
  clockTimer("2012-08-30 10:16:46","clock2");
  clockTimer("2012-08-30 10:17:28","clock3");
  clockTimer("2012-09-07 10:17:47","clock4");
  clockTimer("2012-08-30 10:18:27","clock5");
  clockTimer("2012-08-29 10:18:41","clock6");
}

window.onload = onLoader;
<script>

<body>
...
于 2012-08-27T11:46:46.373 に答える