Ajax 和 MySQL 的特殊字符

Special characters with Ajax and MySQL

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

编码

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

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

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

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

我尝试使用 UTF8_encode and UTF8_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"));

when I use a quote or something everything stops working.

不清楚问题是 (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?