使用Ajax和MySQL的特殊字符

时间:2015-04-14 12:33:26

标签: php mysql ajax encoding utf-8

我有一个使用默认字符集UTF8编码的MySQL数据库。我还有一个用相同的字符集meta charset="UTF-8"编码的PHP代码。

我与数据库的连接也配置为使用UTF8

new PDO("mysql:host=" .$host. ";dbname=".$database,$username,$password,
        array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

但是当我使用 Ajax 来获取文本框的内容并将其插入数据库时​​,我遇到了问题。

如果我不使用特殊字符,它可以正常工作,但是当我使用引号或其他东西时,一切都停止工作。

我尝试使用UTF8_encodeUTF8_decode,但没有改变

修改

PHP

...
<meta charset="UTF-8">
...
<textarea class="commentBox"  id="<?php echo $id_case;?>"></textarea>
<button class="saveComment" id="<?php echo $id_case;?>"> Save comment </button>

//id_case is different for each textarea

的Javascript

$('.saveComment').click(function() 
        {   
            var idComment = this.id;
            var content = $('#'+idComment+'.commentBox').val();
            add_comment(idComment, content);
        });

function add_comment(case_id, content)
{           
    $.post("../functions/ajax/add_comment.php",
    {
      id_case: case_id,
      content: content
    },
    function(data,status)
    {       
        alert("It worked !");
        console.log("Function add_comment : "+status);
    });             
}

add_comment.php

<?php
if(isset($_POST['id_case'], $_POST['content']))
    {       
        $case = $_POST['id_case'];  
        $content = $_POST['content'];   
    }
    else
    {
        echo "Error during sending data to [add_comment.php]";
    }   

    if($db != null)
    {       
        try
            {
                $sql = ("UPDATE cases SET progress_remarks = '$content' WHERE id_cases = $case");               
                $result = $db->exec($sql);  

                echo $content;
            }
            catch(PDOException $e)
            {
                echo $sql . "<br>" . $e->getMessage();
            }   

    }

    else echo "Erreur interne (fill_progress.php)";
?>

我的数据库连接在其他地方完成,但看起来像这样

$this->con = new PDO("mysql:host=" .$host. ";dbname=".$database,$username,$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

1 个答案:

答案 0 :(得分:0)

  

当我使用引用或其他东西时,一切都停止了。

目前尚不清楚问题是(1)是一个逃避问题,还是(2)也是一个utf8问题。

由于PDO有内置的方法来处理转义,请使用它:

$sql = ("UPDATE cases SET progress_remarks = ? WHERE id_cases = $case");
$result = $db->exec($sql, $content);  

这可能是使用PDO设置字符集的首选方法:$db = new PDO('dblib:host=host;dbname=db;charset=UTF-8', $user, $pwd);

meta charset="UTF-8"是指HTML中的标记,而不是PHP或MySQL。

SHOW CREATE TABLE - 相关列是否已声明CHARACTER SET utf8