PHP卷曲 - 特殊/独特/罕见字符有点麻烦

时间:2014-06-19 10:58:11

标签: php curl

我在运行php 5.2。*;

的服务器上有以下代码
$curl = curl_init();
//$sumName = curl_escape($curl, $sumNameWeb);
$summonerName = urlencode($summonerName);
$url = "https://euw.api.pvp.net/api/lol/euw/v1.4/summoner/by-name/{$summonerName}?api_key=".$key;

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
$result = curl_exec($curl);
$result = utf8_encode($result);
$obj = json_decode($result, true);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

它工作正常,但是当涉及到特殊字符时; Öååí..等它无法连接..我一直尝试不同的方式也许我会找到修复但我没有这样做..

好的,我发现了我的错误!!但这是我的情况..它连接到服务器并获取数据..并且我使用$ sumNameWeb来解码时,它被解码但是返回的$ sumNameWeb特殊字符已更改..这里是访问的代码JSON;

$sumID =  $obj[$sumNameWeb]["id"];
$sumLvl = $obj[$sumNameWeb]["summonerLevel"];

一个例子是,从服务器输入ë并返回ë

4 个答案:

答案 0 :(得分:0)

urlencode根据UTF-8字符集编码对非ASCII字符进行编码。所以很可能你的问题是你的文本(源代码)采用其他编码(不同于UTF-8)。您必须确保它具有UTF-8编码。

答案 1 :(得分:0)

试一下

尝试在curl请求中再设置一个curl参数,用于从结果中过滤垃圾数据。

curl_setopt($curl, CURLOPT_ENCODING ,"");

我希望这可以帮助你!!

答案 2 :(得分:0)

在发送任何发送卷曲之前在页面中添加header

header('Content-Type: text/html; charset=utf-8');

答案 3 :(得分:0)

我遇到了同样的问题。 urlencode无法使用这些链接。我不得不专门用自己取而代之。

$curl = curl_init();
//$sumName = curl_escape($curl, $sumNameWeb);
$summonerName = urlencode($summonerName);
$url = "https://euw.api.pvp.net/api/lol/euw/v1.4/summoner/by-name/{$summonerName}?api_key=".$key;

$str = $url;
$str = str_replace("{", "%7B", $str);
$str = str_replace("$", "%24", $str);
$str = str_replace("}", "%7D", $str);
$url = $str;

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
$result = curl_exec($curl);
$result = utf8_encode($result);
$obj = json_decode($result, true);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

这应该有效。如果需要替换其他字符,可以通过以下链接找到其链接替代:url encoder