2012-05-01 15 views
2

私はAjax呼び出しを使用してヘブライ語で応答します。結果は異なるサイトから得られ、windows-1255がコード化されています。私のページはUTF-8です。 応答は次のようになります。windows-1255からUTF8へのajax応答の変換

îéãò ìî÷áì áæ÷ äçáøä äéùøàìéú àéï 

私はこのサイトを見つけました:http://kanjidict.stc.cx/recode.php はUTF-8(+最後のチェックボックスに印を付ける)するには、Windows-1255を使用して、結果は完璧です。 質問はどうやってPHPで行うのですか?

私はすべてがゴミになります。 UTF-8

$data = 'îéãò ìî÷áì áæ÷ äçáøä äéùøàìéú àéï '; 
echo mb_detect_encoding($data); 

結果(私のPHPファイルがUTF-8であるとして、多分それは本当に、UTF-8である)

私は実際にこの結果必要があります:私がしようとした場合

מידע למקבל בזק החברה הישראלית אין 

をiconv:

echo iconv("WINDOWS-1255", "UTF-8", "îéãò ìî÷áì áæ÷ äçáøä äéùøàìéú àéï "); 

ֳ®ֳ©ֳ£ֳ² ֳ¬ֳ®ֳ·ֳ¡ֳ¬ ֳ¡ֳ¦ֳ· ֳ₪ֳ§ֳ¡ֳ¸ֳ₪ ֳ₪ֳ©ֳ¹ֳ¸ֳ ֳ¬ֳ©ֳ÷ ֳ ֳ©ֳ¯ 

何が起こっているのですか?どのようにしてヘブライの結果を得ることができますか?

ありがとうございます!

+0

私は混乱している:ここで

は行うことができますサンプル関数は、一般的なケースではあなたのための手順1〜3をです。 Ajax(つまり、クライアント側のJavaScriptからのXMLHTTPRequest)またはPHPを使用してそのページを取得していますか?現在使用しているPHPコードを表示できますか? – Tomalak

+0

jQuery $ .getを使用してphpページを呼び出します。これはcURLを使用してwindows-1255エンコーディングを使用している別のページからデータを持ち込みます – Ted

+0

Ajaxの部分は当面はかなり無関係です。 'curl'コードを表示してください。 – Tomalak

答えて

2

あなたはこの内容のファイルがある場合:あなたは、ファイル自体を保存エンコードすることが非常に重要である

echo iconv("WINDOWS-1255", "UTF-8", "îéãò ìî÷áì áæ÷ äçáøä äéùøàìéú àéï "); 

を。 PHPの文字列はエンコーディングを気にせず、単にバイト配列として機能します。したがって、UTF-8エンコーディングを使用してそのようなファイルを保存すると、文字列はもちろんUTF-8で保存され、iconvはUTF-8であるためWIN1255から変換できません。

私の提案は、1)元のエンコーディングの文字列をサーバから取得することです。2)それをそのままファイルに保存します。3)そのファイルを使って試してみてください。それはそうだった。 &をどこかに貼り付けると、おそらくその物のエンコードが変更されます。

また、16進エディタでデータを表示しても、ファイルに何が格納されているかを確認することはできません。

とにかく、あなたが言うことは正しいと思われる:サーバーからWIN-1255データを取得し、iconv(...)を呼び出して、UTF-8でそれをHTMLページに出力する(もちろん、UTF-8であることを示す<meta>があります)。

1

再エンコードする必要はありません。宣言されたwin-1255のエンコーディングで同じコンテンツを提供し、ブラウザで処理させることができます。

あなたが再エンコードしたい場合は、そのように、サーバー上でそれを実行する必要があります。

  1. は、リモートサーバーから文字列を取得します。
  2. (httpヘッダーまたはhtmlヘッダーからの)文字列のエンコーディングを決定します。
  3. 必要に応じてエンコードをutf-8に変換します。
  4. 適切なutf-8エンコーディング宣言で新しい値をクライアントに返します。

Content-Type: text/html;charset=utf8ヘッダーが手順4で紛失している可能性があります。その場合、echo iconv(...)が正しく表示されません。

function getUrlAsUtf8($url) { 
    $s = file_get_contents($url); 
    if ($s) { 
     $contenttype = preg_grep('/content-type:(?:(?:\r\n)?[ \t]+)*+((?:(?:(?:\r\n)[ \t]+)|[ \t\x20-\x7e\x80-\xff])*)/i', $http_response_header); 
     $inputcharset = null; 
     foreach ($contenttype as $ct) { 
      if (preg_match('/charset\s*=\s*(.*?)(?:$|;)/i', $ct, $matches)) { 
       $inputcharset = strtolower($matches[1]); 
      } 
     } 
     if ($inputcharset and $inputcharset!=='utf-8') { 
      $s = mb_convert_encoding($s, 'utf-8', $inputcharset); 
     } 
    } 
    return $s; 
} 

echo getUrlAsUtf8('http://example.org'); 
関連する問題