MySQLi插入字符串在&;性格


MySQLi insert string dies at & character

我现在大部分时间都在与数据库插入问题作斗争,所以现在是时候寻求帮助了。

我在我的网站上有一个评论表单,它是通过ajax提交和处理的,10次中有9次它会完美地工作,但我注意到,当你输入&字符时,它会提前结束字符串,但仍然会在该字符之前将字符串插入数据库!

在我的评论部分,我允许发布代码片段,并在页面上显示时突出显示,所以在任何发布的代码片段中,都非常需要&字符来进行比较。

我使用的是MySQLi类,escape函数只是一个基本的real_escape,mynl2br只是一个自定义nl2br函数,这是将注释数据插入数据库的代码:

$name = $db->escape($_POST['name']);
$email = $db->escape($_POST['email']);
$url = $db->escape($_POST['web']);
$comment = $db->escape(mynl2br($_POST['comments']));
$script_id = $db->escape($_POST['script_id']);
$insertData = array(
    '`author`' => ''.$name.'',
    '`email`' => ''.$email.'',
    '`url`' => ''.$url.'',
    '`comment`' => ''.$comment.'',
    '`script_id`' => ''.$script_id.'',
    '`time`' => ''.time().''
);
if ($db->insert('script_comments', $insertData)) {
    // sent success response back
    exit;   
}

有人能理解为什么&字符过早地结束了注释字符串?

您的Ajax请求通过GET请求(应该是POST)发送数据,并且数据没有通过javascript端的encodeURIComponent()正确转义。到目前为止,您的PHP脚本看起来不错。