所以......我有一个mysql_fetch_array,当一些mysql数据包含单引号或双引号时,我遇到了问题。这是我的代码的愚蠢版本:
while($row=mysql_fetch_array($list)) {
echo "<tr>";
echo "<td onclick='edit_form(\"" . $row['item'] . "\");'>" . $row['item'];
echo "</td></tr>";
}
edit_form()函数用于将当前项的值发送回表单中输入的值,以便用户可以轻松编辑其条目,然后向mysql发送UPDATE命令以及正确的主要内容密钥id(由于不相关而遗漏了)。我唯一的问题是,如果用户将单引号或双引号放入表单中,那么它会混淆onclick属性。请帮忙!!我是php的新手,无法解决这个问题。我已经搞砸了htmlentites()和html_entity_decode(),但我仍然没有在哪里。非常感谢你!
答案 0 :(得分:2)
在$row['item']
上使用htmlspecialchars
,然后再将其插入您的文档中。
所以你的“愚蠢”代码应该是:
while($row=mysql_fetch_array($list)) {
$item = htmlspecialchars($row['item']);
echo "<tr>";
echo "<td onclick='edit_form(\"" . $item . "\");'>" . $item;
echo "</td></tr>";
}
答案 1 :(得分:0)
我建议使用json_encode。这样你就不必担心htmlspecialchars可能遗漏的特殊情况(例如换行符)。
while($row=mysql_fetch_array($list)) {
echo "<tr>";
echo "<td onclick='edit_form(" . json_encode($row['item'], JSON_HEX_APOS) . ");'>" . $row['item'];
echo "</td></tr>";
}
答案 2 :(得分:0)
在代码中尝试以下行而不是原始行,看看它是否有效:
echo "<td onclick='edit_form(\"" . str_replace('"',""e;",$row['item']) . "\");\">" . $row['item'];
如果您想要显示$ item字段,只需将其替换为“e;而不是'”。例如:
$qoute_free= str_replace('"e','"',$passed_value);
如果您在javascript中使用它,则功能如下:
function edit_form(passed_value)
{
new_value=passed_value.replace(/"e;/g,'"');
}
答案 3 :(得分:0)
我只是将值重新放回<form>
(当他们点击<td>
时),当他们点击SUBMIT时,它会将数据定向到使用MySQL UPDATE的其他.php文件而不是INSERT。我终于找到了一些有效的代码!
$list
是我在文档顶部运行的mysql_query
$item
是我在MySQL中的一个专栏的标题
while($row=mysql_fetch_array($list)){
$item = json_encode($row['item']);
$item = str_replace("'","'",$item);
echo "<td onclick='edit_form(" . $item . ");'>" . $row['item'] . "</td>";
}
现在,当点击<form>
时(jQuery <td>
),它会在input.val($item)
中正确显示,并通过$row['item']
正确显示在表格中。我真的不明白它是如何工作的(编码如何使其工作)但我很高兴它。 Crazyness !!!!谢谢你的回复!并感谢您的努力!!