2011-06-27 10 views
2

ジオロケーションウェブサイトから特定の住所(緯度/緯度)から入手できる最も近い場所を検索しています。 それはうまく動作しますが、いくつかの場所では名前に迷惑な文字を与えます。さらに、ブラウザでは私のPHP CURL機能とは違うキャラクターが得られています。ここで は、URLがロケーションリスト取得中にPHPでCURLが発生する

http://www.geoplugin.net/extras/nearby.gp?lat=17.7374669&long=83.3214858&limit=5&radius=50&format=php

ある場所の一つは、元の場所名に「Sitammapeta」ですが、ブラウザでは、私はCURL関数のように、私は「SA«tammapeta」を取得しています「Sītammapeta」を取得しています。

なぜこの違いがあるのか​​教えてください。ブラウザの出力を元のものに変換する関数を書いて、うまくいきました。

function convert ($old) 
    { 
     $n=""; 
     for ($i=0; $i<strlen($old); $i++) 
     { 
      $n .= chr(ord(substr($old,$i,1))); 
     } 
     return $n; 
    } 

しかし、私はCURLの出力を元の名前に変換する方法を理解していません。

EDIT CURLコード

$ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, $host); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_USERAGENT, 'geoPlugin PHP Class v1.0'); 
      $response = curl_exec($ch); 
      curl_close ($ch); 

答えて

1

問題は、ウェブブラウザにデータを表示していること、送信したデータがUTF-8でエンコードされていること、ブラウザがそれを知らないことです。 <meta charset="utf-8" />または<meta http-equiv="Content-Type" content="text/html; charset=utf-8">をHTMLドキュメントの先頭に追加すると、問題が解決するはずです。 <meta charset="utf-8" />または<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Without

:UTF-8として定義されたcharsetなし

また

With

、あなたのPHPスクリプトが送るかもしれませんコンテンツタイプヘッダはheader('Content-Type:text/html; charset=utf-8');(またはプレーンテキストを使用する場合は、text/htmltext/plainに置き換えてください。

参考:RFC2616 Section 3.7.1によると

明示的なcharsetパラメータは、送信者によって提供さ 、「テキスト」タイプの がデフォルト を持つように定義されたメディアサブタイプではありませんcharset値 HTTP経由で受信した場合の「ISO-8859-1」。あなたは文字セットを指定しない場合、ISO-8859-1を使用する(必要がある)し、データがUTF-8エンコードされている場合など、一部の文字が正しく表示されないことを意味

+1

私は文字列で出力が必要です私はページのメタタグを使用することはできません。どのようにコンテンツタイプを設定するためにcURLで渡すことができます – AjayR

+0

私はこのように試みましたが、それは動作しませんでした。 $ hdrs = array( 'コンテンツタイプ:text/html; charset = utf-8'); \t \t \t curl_setopt($ ch、CURLOPT_HTTPHEADER、$ hdrs); – AjayR

+0

@Ajay - "テキスト"をWebブラウザに出力して、テキストファイルに保存するか、コンソールに出力していますか? –

1

それだけでエンコーディングの問題だようにこれが見えます。ブラウザは通常自動的に最適なエンコーディングを検出して使用しますが、cURLの内部はできません。私はcurl_setopt()関数を調べて、渡すことができるエンコーディングオプションを確認します。

+0

答えを確認してください – AjayR

+0

私は 'curl_setopt($ ch、CURLOPT_ENCODING、 '');'を使用して受け入れられたエンコーディングを "ゼロ"にしてから、明示的に 'Content-type :application/json; charset ......文字セットが何であれ... 'cURL投稿の一部としてのHTTPヘッダー。 – jerluc

+0

私はエンコーディングを試みましたが、運はありませんでした。 – AjayR

関連する問題