我在下面有这行代码:
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('!"�$%^&*()-=\'.,:;/?#~*/\\><'
如何解决这个问题?
答案 0 :(得分:2)
T_CONSTANT_ENCAPSED_STRING
基本上是报价不匹配。 StackOverflow的语法高亮显示使颜色变化更加明显。
$question')
删除单引号,你应该很好。
随访:
正如Cups提到的那样,您可以使用heredoc
(虽然我个人认为从可读性的角度来看,它在这个特定情况下没有帮助 - 您仍然在HTML中嵌入了很多变量句法)。另一种方法是将parent.addwindow
参数存储为变量,然后将其传递给字符串(从扩展的回显线中保存并担心引用不匹配。例如:
$addWindowArgs = "'" . implode("','", array(
str_replace('"','"', $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('"','"', $question),
$searchMarks[$key],
$searchNoofAnswers[$key],
$searchOption[$key],
$searchReply[$key],
$searchAnswer[$key]
);
如果某些参数是数字,有些是字符串等,这可以让您获得更多控制权。