【问题标题】:Converting windows-1255 to UTF-8 in PHP 5在 PHP 5 中将 windows-1255 转换为 UTF-8
【发布时间】:2014-01-21 08:14:47
【问题描述】:

我的网站中有一个页面,该页面的主要内容来自旧的大型机。来自大型机的内容编码是 windows-1255(希伯来语)。我网站的编码是 UTF-8。

起初我使用 iframe 来显示从大型机收到的答案。在那个解决方案中,我设置页面的编码没有问题,字符显示也很好,但是我在响应式设置页面时遇到了一些问题(我的所有网站都是响应式的)。

然后我尝试使用file_get_contents 获取内容并将其添加到正确的位置,但是所有字符看起来像这样:���� ��,然后我转换了内容:

iconv("cp1255","UTF-8",file_get_contents("my_url"));

结果是希伯来语颠倒过来的。例如,单词“nice”显示为“ecin”。 内容还包括HTML标签,不仅是希伯来语文本,所以我不能简单地用hebrev反转文本。

我看到在 PHP 4 中存在 fribidi_log2vis 函数,这似乎解决了我的问题,但 PHP 5 不支持它(我正在使用 PHP 5.3.3)。

有没有比将内容加载到 iframe 中更好的处理方式?

更新

我尝试获取我创建的测试文件(使用编码 windows-1255)并且我的原始代码工作正常。我怀疑我得到的内容不是 windows-1255,至少在希伯来字母顺序方面不是。大型机上的转换可能是原因。我必须调查一下(我必须等到周日,因为我无法直接访问服务器)。

【问题讨论】:

  • 你试过mb_convert_encoding吗?
  • @Machavity mb_convert_encoding 也会产生反转文本。
  • 我对希伯来语一无所知,但您似乎已成功转换为 UTF-8;也许你只需要调整你的 HTML 标记来通知浏览器这些文本必须显示为 RTL。
  • @ÁlvaroG.Vicario 我将页面设置为 RTL。其余的 UTF-8 希伯来文文本,如我的菜单文本,显示正常,但转换后的文本是相反的。
  • 顺便说一句,PHP 5 支持 fribidi_log2vis() ,只是不再与 PHP 捆绑。请参阅PECL page 了解更多详细信息,甚至是 Windows 下载。

标签: php html encoding php-5.3 hebrew


【解决方案1】:

file_get_contents 获取 ISO 8859-1 内容作为字符编码的问题。您必须通过函数stream_context_create 使用字符集 Windows-1255 为 file_get_contents 创建流上下文:

$opts = array('http' => array('header' => 'Accept-Charset: windows-1255,utf-8;q=0.7,*;q=0.7'));
$context = stream_context_create($opts);

$content = file_get_contents('my_url', false, $context);
iconv("cp1255", "UTF-8", $content);

【讨论】:

  • 我不知道是不是这个问题,但是您建议的解决方案不起作用。
  • iconv之后的输出是什么?
  • 还是一样的结果。
  • 你能给个网址吗,你从哪里得到内容?
  • 我在旧帖子中知道这一点,但我得到了答案,但不是来自这篇帖子,而是来自这个帖子:stackoverflow.com/questions/15593394/…
猜你喜欢
  • 2013-04-22
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
相关资源
最近更新 更多