Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANSI<--&燃气轮机;显示数据库中的图像时出现UTF-8字符集问题(PHP)_Php_Database_Image_Utf 8_Character Encoding - Fatal编程技术网

ANSI<--&燃气轮机;显示数据库中的图像时出现UTF-8字符集问题(PHP)

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

我正在从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.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的情况下发送?