【问题标题】:How to force ANSI encoding for binary data in php如何在php中强制对二进制数据进行ANSI编码
【发布时间】:2013-07-05 15:08:30
【问题描述】:

我在 SO 上阅读了一些答案,但没有找到答案,是否可以在 php.ini 中为二进制数据设置 ANSI endocing。我正在使用 curl 读取图像并将它们回显给用户,但它们保存为 UTF-8,并且不显示图像。当我将它保存为服务器上的文件(使用 fopen fwrite)并打开该文件时,一切正常,就像我在 Notepad++ 中将编码更改为 ANSI 一样。现在我正在 Windows 上测试它,但它也应该在 Unix/Linux 机器上工作。是否可以在 php 中执行此操作?这与我没有找到解决方案的另一个问题How to display binary data from curl in php 有关。

我尝试使用mb_detect_encoding 函数与iconv 一起使用,但它不会在我测试它的本地主机上返回任何内容。

我不知道它是否需要Windows-1252,它在我认为不应该向不同浏览器发送不同数据的服务器上工作。

【问题讨论】:

  • 二进制数据根据定义没有字符编码。只有字符串有一些字符编码!
  • 很有可能您没有重新传输文件头,说明它是什么类型的文件以及什么图像类型等
  • 而 PHP“字符串”是二进制数据,除非您假设它们是某种字符编码的文本。
  • 我回显字符串并从服务器发送标头,输出数据保存为 UTF-8(当我在 Notepad++ 中打开它时)但我只能看到它如果我将结束更改为 ANSI,所以我需要以某种方式强制ANSI。

标签: php image binary ansi


【解决方案1】:

由于 PHP 的“字符串”是二进制数据,您首先要对字符串数据进行编码,然后将该数据作为一个整体插入到二进制数据中(在 PHP 中只是一个字符串)。

$string = iconv(mb_detect_encoding($string), 'Windows-1252//TRANSLIT', $string);

【讨论】:

  • 抱歉没办法测试,不知道我用的代码在哪里。还有一件事我想要这个用于我的 php 代理我已经在 Windows 上启动了它但它不起作用,我在 Linux 上再次启动它并且它工作正常。虽然没有在 Windows 上测试我的解决方案。
猜你喜欢
  • 2018-03-20
  • 1970-01-01
  • 2021-06-11
  • 2012-06-01
  • 2012-08-23
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
相关资源
最近更新 更多