2017-01-27 3 views
0

私はcurlとphpで初心者です。実際に私はこのサンプルコードで作業しています:PHPのカール出力はエンコードされていますか?私のIFは間違っていますか?

私はこの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! 

場合、私はしたいですか?サーバー構成ですか?

+0

あなたは' var_dimp($ visitor_city)の出力であるかを示すことができますか? –

答えて

1

trim()と1試してください: - ; `

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

ありがとうございます、うまく動作します! trim()の機能は何ですか? –

+0

@ ArtaxerxesSaintは、文字列の開始と終了から空白を削除します –

1

デバッグライン出力を追加して、その戻り値の周囲に空白がないかどうかを確認します。

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

あなたが「ニューヨーク」と自分の括弧の間に任意の新しい行またはスペースが表示された場合はevalはfalseを返しますので、もし、その後、ホワイトスペースは、あります。

戻り値にHTMLがある可能性もあります。あなたが予想される文字を数えることができる、それがより多くのだ場合は、空白および/またはHTMLタグがありますので、

は多分、単純な echo strlen($visitor_city); 、役立つだろう。

またはちょうどあなたも、ちょうどあなたの出力にソースを表示し、そこに余分なコンテンツがありますかどうかを見ることができ、特別なHTML文字 echo htmlspecialchars($visitor_city);

を印刷します。

関連する問題