-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

如何消除此错误?

更新:

好的,我删除了前面提到的单引号,但问题是它弄乱了我的添加按钮。当我单击“添加”按钮时,我现在收到此错误:

syntaxError:未终止的字符串文字错误:

父.addwindow('!

在控制台中显示错误的代码行如下:

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

如何解决这个问题?

4

1 回答 1

2

T_CONSTANT_ENCAPSED_STRING基本上是报价不匹配。StackOverflow 的语法高亮使颜色变化更加明显。

$question')

删除单引号,你应该很好。

跟进:

备择方案:

正如Cups所提到的,您可以使用heredoc(尽管从可读性的角度来看,我个人认为它在这种特定情况下没有帮助——您仍然在 HTML 语法中嵌入了很多变量)。另一种方法是将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使用相同的 echo 调用:

$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 回答