尝试替换字符串时解析php中的错误

时间:2012-10-08 17:41:26

标签: php javascript

我在下面有这行代码:

     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替换一些字符串字符但是当我这样做时,我在上面的行中得到了这个错误:

  

解析错误:语法错误,意外T_CONSTANT_ENCAPSED_STRING   ......第154行的text.php

如何删除此错误?

更新:

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

  

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

     

parent.addwindow('!

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

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

如何解决这个问题?

1 个答案:

答案 0 :(得分: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使用相同的回音调用:

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

如果某些参数是数字,有些是字符串等,这可以让您获得更多控制权。