MySQLi插入字符串死于&字符

时间:2013-08-16 18:10:05

标签: php ajax mysqli

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

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

在我的评论部分中,我允许在页面上显示时发布和突出显示代码片段,因此在任何已发布的片段中都需要&字符进行比较。

我正在使用MySQLi类,转义函数只是一个基本的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;   
}

任何人都可以理解为什么&字符是否过早地结束了注释字符串?

1 个答案:

答案 0 :(得分:2)

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