[英]Php modifies values retrieved from database (codification and special characters issues)
尽管我找到了类似问题的答案,但仍然无法解决以下问题:我有一个使用utf8编码的数据库,
CREATE TABLE report (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
description TEXT,
image MEDIUMTEXT,
[...]
) DEFAULT CHARACTER SET utf8
我已经从我的android应用程序成功上传了一些条目。 特别是,图像是由字符串编码的(编码/未编码有效,因此我不再赘述); 但是,当我的android应用程序与服务器(执行php脚本)联系以获取描述和图像时,“描述”中的特殊字符(例如“è”)存在问题,而将图像编码的字符串返回给android应用程序在每个特殊字符(例如'/')之前都用转义字符('\\')填充,因此返回的String与发送的String不同,因此无法从损坏的String中检索图像。
我将要执行的查询(此处的“ id”字段已固定,用于调试目的)如下,在phpMyAdmin上运行正常
SELECT description, image FROM report WHERE id=8
我想问题出在以下php脚本中(我将仅粘贴相关部分)
<?php
header('Content-Type: application/json');
$action = $_POST['action'];
try {
$pdo = new PDO('mysql:host=activecitizen.altervista.org;dbname=my_activecitizen', 'activecitizen', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e) {
[...]
}
switch($action){
[...]
break;
case "get_report_details":
$report_id = $_POST['report_id'];
$report_id_int = (int)$report_id;
try{
$sql = 'SELECT description, image FROM report WHERE id = '.$report_id_int;
$result = $pdo->query($sql);
$row = $result->fetch();
$output .= $row['description'];
$output .= "~";
$output .= $row['image'];
echo json_encode($output);
exit();
}
catch (PDOException $e){
[...]
}
break;
}
?>
我以为$ pdo-> exec('SET NAMES“ utf8”'); 行足以解决编码问题,但事实并非如此。
这是返回到android应用程序的字符串的预览:
"qui c'\u00e8 qualcuno che non ha voglia di rifarsi il letto!~iVBORw0KGgoAAAANSUhEUgAAAUwAAAC6CAIAAABKsOO4AAAAA3NCSVQICAjb4U\/gAA[...]"
在这里您可以看到,返回的“ c'\\ u00e8”是由“c'è”插入的,并且iVBORw0KGgoAAAANSUhEUgAAAUwAAAC6CAIAAABKsOO4AAAAA3NCSVQICAjb4U / gAA代替了iVBORw0KGgoAAAANSUhEUgAAAUwAAAC6CAIAAABNs的第一个执行过的字符串(第一个)。
对于这个漫长的问题,我们深表歉意,在此先感谢您谁愿意提供帮助。
json_encode()
将多字节unicode字符编码为\\uXXXX
。 如果您不希望这样,可以使用JSON_UNESCAPED_UNICODE
选项,如下所示:
echo json_encode($output, JSON_UNESCAPED_UNICODE);
请参阅有关json_encode()和JSON常量的文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.