我正在尝试从数据库中获取一些文本并使用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不起作用!
有人可以帮帮我吗?
答案 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
函数有三个参数(id
,title
,content
)但是你的下面的初始化函数只有content
? 暂时尝试删除id
和title
,看看您是否可以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, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
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>';
}
我不相信这是一个编码问题,但我肯定是错的......:)