ANSI<--&燃气轮机;显示数据库中的图像时出现UTF-8字符集问题(PHP)
我正在从MySQL数据库加载图像,以便在Web GUI中显示它们 这是相当标准的,工作也很好,直到我试图在俄罗斯安装软件 下面是加载图像的代码示例:ANSI<--&燃气轮机;显示数据库中的图像时出现UTF-8字符集问题(PHP),php,database,image,utf-8,character-encoding,Php,Database,Image,Utf 8,Character Encoding,我正在从MySQL数据库加载图像,以便在Web GUI中显示它们 这是相当标准的,工作也很好,直到我试图在俄罗斯安装软件 下面是加载图像的代码示例: // Load overview image if ($global_mode == 'overview') { // Load the image from the database. mysql_select_db("$db_x"); $sql = "SELECT $db_x.sensor_images.imag
// Load overview image
if ($global_mode == 'overview') {
// Load the image from the database.
mysql_select_db("$db_x");
$sql = "SELECT $db_x.sensor_images.image
FROM $db_x.sensor_images
WHERE $db_x.sensor_images.image_id = '" . $global_image_id . "'";
$sql = mysql_query($sql);
$row = mysql_fetch_assoc($sql);
// Image output.
header('Content-type: image/jpeg');
echo $row['image'];
}
我在许多欧洲笔记本电脑上安装了这个软件,但我从来没有遇到过这样的问题,图像没有显示出来
显然,在俄罗斯笔记本电脑(Windows7、XAAMP、MySQL)上,情况并非如此,没有显示图像
我开始做一些研究,发现(在我的笔记本电脑上,图像显示的地方…),如果我更改php文件的编码(在本例中是show_image.php),我可以复制我在俄罗斯笔记本电脑上的错误
如果编码设置为ANSI,则会显示图像…
在这里,我禁用了标题,因此浏览器显示二进制数据(PHP文件的编码设置为ANSI)
例A
现在我将PHP文件的编码设置为UTF-8
通过执行此操作,图像不再显示
这是当我试图显示没有标题的数据时的输出
例B
正如您所看到的,输出是不同的
在我的笔记本电脑上(欧洲版):
// Load overview image
if ($global_mode == 'overview') {
// Load the image from the database.
mysql_select_db("$db_x");
$sql = "SELECT $db_x.sensor_images.image
FROM $db_x.sensor_images
WHERE $db_x.sensor_images.image_id = '" . $global_image_id . "'";
$sql = mysql_query($sql);
$row = mysql_fetch_assoc($sql);
// Image output.
header('Content-type: image/jpeg');
echo $row['image'];
}
ANSI:显示图像时,数据(不带标题)如示例A所示
UTF-8:图像不显示,数据(不带标题)如示例B所示
在俄罗斯笔记本电脑上:
ANSI:图像不显示,数据(不带标题)如示例B所示
UTF-8:图像不显示,数据(不带标题)如示例B所示
我仍然不明白为什么更改php文件的编码会影响二进制数据的输出,分别是图像
在俄罗斯笔记本电脑上,PHP文件总是被解释为编码设置为UTF-8,无论我是将其设置为ANSI还是其他什么
请帮忙
Thx。在IDE中,您会看到“UTF-8”和“UTF-8无BOM”。您选择的是UTF-8,在本例中,这意味着。BOM表在文件前面,是输出的第一个内容。这可能会a)中断标题的输出,从而中断数据显示;b)向浏览器提供以下数据被假定为UTF-8编码的线索,因此浏览器将数据解释为UTF-8,从而导致大量UNICODE替换字符�. 检查错误日志,您应该会看到PHP抱怨
您发送的数据总是相同的,只是根据机器的默认值和UTF-8 BOM的存在与否以不同的编码进行解释
在任何情况下它都会中断的唯一原因是您输出了错误的标题和/或在图像数据之前或之后发送了其他内容。使用诸如curl之类的低级工具检查输出的确切内容,并查找并删除任何不属于的内容。将发送图片的php文件保存为“UTF-8 w/o BOM”。
如果包含任何文件,则必须将其保存为“ANSI”或“UTF-8 w/o BOM”
在
可能是您的PHP服务器字符集不正确 在
php.ini
文件中,尝试使用以下指令:
default_charset = "UTF-8"
然后重新启动服务器。您存储图像的数据库字段是什么类型的?
image
mediumblob COMMENT'full image',您的PHP脚本是否仅返回图像(回声也是答案的结尾)还是将JPEG与文本混合?PHP脚本仅返回图像…您好,这似乎确实是BOM的问题。无论出于何种原因,Web服务器都会在我的笔记本电脑上发送没有BOM的数据,在俄罗斯笔记本电脑上发送带有BOM的数据。设置PHP文件的编码DO不会影响俄罗斯笔记本电脑上的输出,这是因为webserber总是随BOM一起发送,从而导致错误。在配置apache或php时,是否有任何方法可以使其始终在不使用BOM的情况下发送?