file_get_contents编码 - 使用Chrome和Safari,不使用Firefox,Opera,IE

时间:2013-03-20 09:12:24

标签: php jquery cross-browser file-get-contents

从几天开始,我正在尝试实施一些代码,将一些示例内容从另一个站点加载到我的站点。我有编码问题 - 波兰语。 源站点是ISO-8859-2,目标是UTF-8。  它适用于Chrome和Safari,不适用于FF,Opera和IE。我做错了什么?

的index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test_site</title>



<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"></script>
<script type="text/javascript">
    $("document").ready(function() {

        $("#content").load("curl.php #news_ajax");

    });
</script>


</head>
<body>

<h1>Test site</h1>
<div id="content"><img src="ajax-loader.gif" alt="Loading..." /></div>

</body>
</html>

curl.php

<?php
    $url = 'http://www.dominikanie.pl/';
    $htm = file_get_contents($url);
    $domain = "http://www.dominikanie.pl/";
    $htm = preg_replace("/(href|src)\=\"([^(http)])(\/)?/", "$1=\"$domain$2", $htm);
    $htm = mb_convert_encoding($htm, "ISO-8859-2",
          mb_detect_encoding($htm, "UTF-8, ISO-8859-2", true));
    echo $htm;

?>

我试过iconv但没有结果。测试site

2 个答案:

答案 0 :(得分:2)

  • Web浏览器与file_get_contents无关。

  • 使用CURL而不是file_get_content。文档here

  • 此外,dominikanie.pl(来源)是UTF-8,而不是ISO。这就是您的编码不起作用的原因。

  • 您可以尝试通过AJAX查询数据时将数据作为XML或jSon对象发送。

  • 使用较新的jQuery

  • iconv vs mb - 我更喜欢iconv。另外我的经验是编码检测并不总是按预期工作。特别是当没有太多的数据需要测试或者有一些奇怪的实体如MsWord特殊字符(如波兰语“”)

  • str_repleace有时会出现波兰字符问题。它很少见,但过去我遇到了一些问题。也不要使用htmlentities()。它真的很想打破PL字符:]

答案 1 :(得分:1)

  

源站点是ISO-8859-2,目标是UTF-8

所以它应该是

$htm = mb_convert_encoding($htm, "UTF-8",
      mb_detect_encoding($htm, "UTF-8, ISO-8859-2", true));
相关问题