斯堪的纳维亚字符和file_get_contents()

时间:2013-01-18 15:21:57

标签: php

我正在从网址加载内容;该网址格式为www.example.com/?keyword=something。我根据用户的关键字获取具体内容,如下所示:

$url = 'www.example.com/?';
$url = $url."keyword=$something";

function getData ($url) {

    $data = file_get_contents($url);

    return $data;
}

原始数据包含Ö或Å等斯堪的纳维亚字符。加载后,这些字符不再具有可读性。如何解决这个特殊字符问题?

更新:

我用这种方式更改了代码:

function getData ($url) {

   $data = urlencode(file_get_contents($url));
   $data = urldecode($data);

    return $data;
}

也没有帮助。 $data = utf8_decode(urldecode($data));echo utf8_decode(urldecode(getData($keyword)));也无济于事。我在这做什么事呢?

3 个答案:

答案 0 :(得分:3)

file_get_contents不是charset意识到的。它返回它提供的确切字节。这意味着如果url返回UTF-8,并将其显示为iso-8859-1,那么事情就会出错。最有可能的情况是这种情况(但也可能是相反的情况)。转换为ISO-8859-1,或将您的应用更改为使用UTF-8。前者可能是最简单的变化 - 通过utf8_decode管道内容,从UTF-8转换为ISO-8859-1。

E.g:

function getData ($url) {
    $data = file_get_contents($url);
    $data = utf8_decode($data);
    return $data;
}

答案 1 :(得分:1)

您需要使用mb_convert_encoding将文本转换为正确的编码。

$data = mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data));

如果您使用其他编码,请将其替换为'UTF-8'

答案 2 :(得分:0)

使用urlencode(通过get传递数据之前)和urldecode(解码先前编码的字符串)

http://php.net/manual/en/function.urlencode.phphttp://php.net/manual/en/function.urldecode.php

PS:文件和导演不应包含任何变音符号或特殊字符!