在PHP 5中将windows-1255转换为UTF-8

时间:2014-01-03 15:44:15

标签: php html encoding php-5.3 hebrew

我的网站上有一个页面,它从旧主机获取主要内容。来自大型机的内容编码是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中更好地处理它?<​​/ p>

更新

我试图获取我创建的测试文件(使用编码windows-1255),我的原始代码工作正常。我怀疑我得到的内容不是windows-1255,至少不是希伯来语字母顺序。大型机上的转换可能是原因。我将不得不调查(我必须等到星期天因为我没有直接访问服务器)。

1 个答案:

答案 0 :(得分:2)

file_get_contents将内容与ISO 8859-1作为字符编码的问题。您必须使用charset Windows-1255为函数stream_context_create创建一个流上下文,用于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);