-3

我正在尝试从数据库中获取一些文本并使用 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 不起作用!

有人可以帮我吗?

4

3 回答 3

0

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

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>"; 
}
于 2012-10-04T10:05:59.433 回答
0

如果文本包含输入,它将像这样呈现 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 语法突出显示,并且需要所有转义。我认为这种方法更清洁。

于 2012-10-04T10:07:30.737 回答
0

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

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

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

我注意到的其他事情:为什么你的show_details函数有三个参数(id, title, content)但你下面的初始化函数只有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>';
}

或者,正如本文评论所建议的那样,您可以尝试使用htmlentitieshtmlspecialchars在您的 PHP 上使用,$content例如:

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

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

于 2012-10-04T10:10:58.560 回答