JavaScript函数不能与newline / br一起使用

时间:2012-10-04 09:58:17

标签: php javascript

我正在尝试从数据库中获取一些文本并使用Javascript显示它。

这是我的代码:

while ($row = mysql_fetch_array($result)) {

    $content = nl2br($row['content']);
    echo "<a id=\"details\" onclick=\"show_details('{$content}');\"></a>";
    echo "<script type=\"text/javascript\" charset=\"utf-8\">";
    echo "function show_details(id, title, content) {
        alert(content);
    }";
    echo "</script>";

文本类型为utf8_general_ci,当它包含新行时,Javascript不起作用!

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:0)

定义函数一次,并遵守参数。你刚刚定义了id,而不是内容。内容是第三个参数,而不是第一个参数。

echo "<script type=\"text/javascript\" charset=\"utf-8\">"; 
echo "function show_details(id, title, content) { 
  alert(content); 
}"; 
echo "</script>"; 
while ($row = mysql_fetch_array($result)) { 

  $content = nl2br($row['content']); 
  echo "<a id=\"details\" onclick=\"show_details('id', 'title', '$content');\"></a>"; 
}

答案 1 :(得分:0)

如果文本包含enter,它将呈现如下的javascript:

show_details('piece of
content');

这是无效的。

用\ n:

替换输入
while ($row = mysql_fetch_array($result)) 
{
    $content = $row['content'];
    $content = strreplace("\n", "\\n", $content); // 'escape' breaks.
    $content = strreplace("'", "\\'", $content); // escape quotes.

    ?> 
    <a id="details" onclick="show_details('<?=$content?>');"></a>";
    <?
}
?>
<script type="text/javascript" charset="utf-8">";
function show_details(content) {
    alert(content);
}
</script>;

正如您所看到的,我将show_details的声明移出循环,您只需要一次。我也删除了回声。你将松开任何HTML合成文字突出显示,你将需要所有的转义。我认为这种方法更清洁。

答案 2 :(得分:0)

我认为你最好将JavaScript和PHP分开。

因此,在PHP文件(或HTML模板)中,设置脚本:

<script type="text/javascript" charset="utf-8">
    function show_details(id, title, content) {
        alert(content);
    }
</script>

我注意到的其他内容:为什么show_details函数有三个参数(idtitlecontent)但是你的下面的初始化函数只有content暂时尝试删除idtitle,看看您是否可以content正常工作。

那么你的PHP可能只是:

while ($row = mysql_fetch_array($result)) {
    $content = nl2br($row['content']);
    echo '<a id="details" onclick="show_details(\'' . $content . '\');"></a>';
}

现在,就导致问题的新线而言,您尝试过这样的事吗?

JavaScript添加:

function escapeHtml(unsafe) {
  return unsafe
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
}

PHP:

while ($row = mysql_fetch_array($result)) {
    $content = nl2br($row['content']);
    echo '<a id="details" onclick="show_details(escapeHtml(\'' . $content .'\'));"></a>';
}

另外,正如本文评论所建议的那样,您可以尝试在PHP的htmlentities上使用htmlspecialchars$content,例如:

while ($row = mysql_fetch_array($result)) {
    $content = htmlentities( nl2br( $row['content']) );
    echo '<a id="details" onclick="show_details(escapeHtml(\'' . $content .'\'));"></a>';
}

我不相信这是一个编码问题,但我肯定是错的......:)