-1

以下に次のコード行があります。

     foreach ($searchResults as $key=>$question) {

 echo '<tr class="questiontd"><td>'.htmlspecialchars($question).'</td>';
 echo '<td class="optiontypetd">'.htmlspecialchars($searchOption[$key]).'</td>';
 echo '<td class="noofanswerstd">'.htmlspecialchars($searchNoofAnswers[$key]).'</td>';
 echo '<td class="answertd">'.htmlspecialchars($searchAnswer[$key]).'</td>';
 echo '<td class="noofrepliestd">'.htmlspecialchars($searchReply[$key]).'</td>';
 echo '<td class="noofmarkstd">'.htmlspecialchars($searchMarks[$key]).'</td>';
 echo "<td class='addtd'><button type='button' class='add' onclick=\"parent.addwindow('$question','$searchMarks[$key]','$searchNoofAnswers[$key]','$searchOption[$key]','$searchReply[$key]','$searchAnswer[$key]');\">Add</button></td></tr>";
}

ここで、str_repaceを使用していくつかの文字列文字を置き換えたいと思いましたが、これを行うと、上の行で次のエラーが発生します。

解析エラー:構文エラー、154行目の...text.phpの予期しないT_CONSTANT_ENCAPSED_STRING

このエラーを取り除くにはどうすればよいですか?

アップデート:

OK私は前述のように一重引用符を削除しますが、問題はそれが私の追加ボタンを台無しにすることです。[追加]ボタンをクリックすると、次のエラーが発生します。

SyntaxError:未終了の文字列リテラルエラー:

parent.addwindow('!

コンソールにエラーが次のように表示されるコード行:

<button type='button' class='add' onclick="parent.addwindow('!"�$%^&*()-=\'.,:;/?#~*/\\><'

これはどのように修正できますか?

4

1 に答える 1

2

T_CONSTANT_ENCAPSED_STRING基本的に見積もりの​​不一致です。StackOverflowのシンタックスハイライトは、色の変更でより明確になります。

$question')

一重引用符を削除すると、問題がないはずです。

ファローアップ:

代替案:

カップが述べたように、あなたは使うことができます(heredoc私は個人的には読みやすさの観点からこの特定のシナリオでは役に立たないと思います-あなたはまだHTML構文内に多くの変数を埋め込んでいます)。もう1つの方法は、parent.addwindow引数を変数として格納し、それを文字列内に渡すことです(拡張エコー行と引用符の不一致の心配の両方から身を守ってください。例:

$addWindowArgs = "'" . implode("','", array(
  str_replace('"','&quot;', $question),
  $searchMarks[$key],
  $searchNoofAnswers[$key],
  $searchOption[$key],
  $searchReply[$key],
  $searchAnswer[$key]
)) . "'";

echo  "<td class=\"addtd\">"
    . "<button type=\"button\" class=\"add\" onclick=\"parent.addwindow({$addWindowArgs});\">Add</button>"
    . "</td></tr>";

または、同じエコー呼び出しのsprintf代わりに使用できます。implode

$addWindowArgs = sprintf("'%s','%s','%s','%s','%s','%s'",
  str_replace('"','&quot;', $question),
  $searchMarks[$key],
  $searchNoofAnswers[$key],
  $searchOption[$key],
  $searchReply[$key],
  $searchAnswer[$key]
);

これにより、一部の引数が数値、一部が文字列などの場合に、より詳細に制御できます。

于 2012-10-08T17:42:49.027 に答える