gpt4 book ai didi

PHP修改从数据库检索的值(编码和特殊字符问题)

转载 作者:行者123 更新时间:2023-11-29 10:39:14 25 4
gpt4 key购买 nike

虽然我找到了一些与此类似的问题的答案,但我仍然无法解决以下问题:我有一个使用 utf8 编码的数据库,创建了我的方法

    CREATE TABLE report (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
description TEXT,
image MEDIUMTEXT,
[...]
) DEFAULT CHARACTER SET utf8

我已成功从我的 Android 应用程序上传一些条目。特别是,图像由字符串编码(编码/解码有效,所以我不会再重复这一点);但是,当我的 Android 应用程序联系服务器(执行 php 脚本)以检索描述和图像时,在“描述”中存在特殊字符(如“è”)的问题,而编码图像的字符串返回到 Android 应用程序在每个特殊字符(例如“/”)前面都填充了转义字符(“\”),因此返回的字符串与发送的字符串不同,并且无法从损坏的字符串中检索图像。

我要执行的查询(这里“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"'); line 足以解决编码问题,但情况似乎并非如此。

这是返回到 Android 应用程序的字符串的预览:

"qui c'\u00e8 qualcuno che non ha voglia di rifarsi il letto!~iVBORw0KGgoAAAANSUhEUgAAAUwAAAC6CAIAAABKsOO4AAAAA3NCSVQICAjb4U\/gAA[...]"

在这里你可以看到“c'\u00e8”被返回而不是“c'è”并且iVBORw0KGgoAAAANSUhEUgAAAUwAAAC6CAAAABKsOO4AAAAA3NCSVQICAjb4U/gAA 而不是iVBORw0KGgoAAAANSUhEUgAAAUwAAAC6CAAAABKsOO4AAAAA3NCSVQICAjb4U/gAAas(字符串的第一个小 fragment )由在 phpmyadmin 上执行的查询返回。

很抱歉问了这么长的问题,并提前感谢所有愿意提供帮助的人。

最佳答案

json_encode() 将多字节 unicode 字符编码为 \uXXXX。如果您不想这样做,可以使用 JSON_UNESCAPED_UNICODE 选项,如下所示:

echo json_encode($output, JSON_UNESCAPED_UNICODE);

请参阅 json_encode() 上的文档和 JSON constants

关于PHP修改从数据库检索的值(编码和特殊字符问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45837194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com