PHP curl输出是否已编码?我的IF错了吗?

时间:2017-01-27 17:55:17

标签: php if-statement curl

我是curl和php的新手。其实我正在研究这个示例代码:

我使用此API在换行符中接收响应(\ n)。

$client_ip = @$_SERVER['HTTP_CLIENT_IP'];
$forward_ip = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote_ip = $_SERVER['REMOTE_ADDR'];

if (filter_var($client_ip, FILTER_VALIDATE_IP)){
 $visitor_ip = $client_ip;        
} elseif (filter_var($forward_ip, FILTER_VALIDATE_IP)){
 $visitor_ip = $forward_ip;
} else {
 $visitor_ip = $remote_ip;
}

$url = "http://ip-api.com/line/".$visitor_ip."?fields=city";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$visitor_city = curl_exec($curl);
curl_close($curl);

echo $visitor_city;

结果:

New York

结果是正确的。我在纽约,代码显示我的城市。但是当我添加IF时,出现了错误:

if ($visitor_city == "New York") {
    echo " TRUE!";
}

我的结果如果:

New York

但我想要结果

New York TRUE!

我错过了什么?服务器配置?

2 个答案:

答案 0 :(得分:1)

我会添加一个调试行输出,以查看该返回值周围是否有任何空格。

echo "<pre>(".$visitor_city.")</pre>";

如果你看到“New York”和你的parens之间有任何新的行或空格,那么就有空格,所以if eval会返回false。

甚至可能在返回值中有HTML。

甚至可能很简单 echo strlen($visitor_city); 会有所帮助,因为你可以计算出预期的字符,如果更多的话,还有空格和/或HTML标签。

或只打印任何特殊的HTML字符 echo htmlspecialchars($visitor_city);

您甚至可以只查看输出中的来源,看看是否有任何额外的内容。

答案 1 :(得分:1)

使用trim()尝试一个: -

if (trim($visitor_city) == "New York") {
    echo " TRUE!";
}