【问题标题】:Json Encoding fails because of strange chars. Escaping with $pdo->quote($data) not working由于奇怪的字符,Json 编码失败。使用 $pdo->quote($data) 转义不起作用
【发布时间】:2014-11-11 19:16:26
【问题描述】:

我查询数据库,然后我想在 json 中编码响应。

由于'name'和'description'两个字段包含一些诡异的字符,json的编码不成功。

在我对从数据库接收到的数组进行编码后,json 的长度只有 4 个字符。

如果我不从数据库中查询包含那些非常奇怪的字符的表“名称”和“描述”,那么一切都在运行。我可以对数组进行编码然后使用它。

我试过了 $pdo->quote($data[name]) 和 $pdo->quote($data[描述]) ,转义完成了,但问题没有解决..json仍然被那些奇怪的字符搞砸了。

知道会发生什么吗?

【问题讨论】:

  • 你能谈谈你正在使用的字符编码吗(什么是“幽灵”字符?你是否在数据库列、数据库连接和应用程序中使用通用编码?quote() 方法是真的与字符编码问题无关。
  • 我的数据库列排序为 latin1_swedish_ci。我也尝试了 utf8_general_ci 但没有任何改变。我不使用其他任何东西。
  • 我读到 quote() 是为了转义,我认为我的数据的描述/名称中有一些文本会弄乱 json 架构
  • 诡异字符示例 1:'ÃŽnvaţă să
  • 那是一个 UTF-8 被插入到 latin1 列中吗?我猜我在说什么,您的角色数据可能存在潜在问题。如果您希望使用 UTF-8(这对 JSON 很好)。您需要确保为此设置了整个应用程序。您的数据库连接使用正确的编码,表和/或列使用正确的编码,PHP 读取/写入数据库使用正确的编码,等等。

标签: php mysql json pdo escaping


【解决方案1】:

我修好了。 我必须设置数据库连接的字符集:

try {
$pdo = new PDO("mysql:host={$dbhost};dbname={$dbname}", $dbuser, $dbpass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo -> exec('SET NAMES utf8'); // FIX

}
catch( PDOException $excepiton ) {
echo "Connection error :" . $excepiton->getMessage();
}
?>

【讨论】:

    猜你喜欢
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多