2

Twitter API と対話するアプリケーションを構築しています。

これまでのところ、私のコードは応答を正しく処理しており、検索 API とやり取りする方法に満足しています。ただし、Twitter API 応答からの実際のコンテンツに関しては行き詰まっています。

今、私はアトム フィードを使用して特定のハッシュタグを持つツイートを検索します。

$url = 'http://search.twitter.com/search.atom?q='.urlencode($hash_tag) ;
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
$xml = curl_exec ($ch);
curl_close ($ch);

$twelement = new SimpleXMLElement($xml);

echo "<pre>";
foreach ($twelement->entry as $entry) {

echo($entry->author->name);
echo '<br />';
echo mb_detect_encoding($entry->author->name);
echo '<br />';

私は正しい文字エンコーディングにデコード/変換するためにさまざまなphp関数を試してきましたが、何をしても、常に間違った出力になります。

このコードからの私の出力は次のとおりです:(プライバシーのために取り消し線が引かれています)

xxxxxx (xxxxx xxxxxxx)
ASCII

xxxx_xxxxx (Chinny ♥_♥)
UTF-8

kunlemyk ((˘̯˘ ) hardekhunley™)
UTF-8

xxxx_xxxxx (♥ify okwuosa♥)
UTF-8

xxx_xxxx (Call me DRO)
ASCII

ASCII と UTF-8 があるのはなぜですか? それらが一貫していることをどのように確認できますか。それらをASCIIに変換できますか?私はここでかなり迷っています。私は何年もの間これに固執しており、ここで何か助けていただければ幸いです。

よろしく、

アンドリュー

4

2 に答える 2

2

utf8 は、ascii がその適切なサブセットになるように特別に設計されました。これは下位互換性のために行われました。

エンコーディングを検出する関数は、通常、バイト値を調べた後に知識に基づいた推測によって検出します。問題の文字列に ascii 文字しか含まれていない場合は、ascii または utf8 のいずれかである可能性があります。繰り返しますが、これは ascii 文字列が設計上有効な utf8 文字列であるためです。

純粋なASCII文字列を「ascii」と呼ぶ方がより具体的であり、推測すると、遭遇したすべてがASCII文字である場合にのみ、それがASCIIであることが確実にわかるためです。文字列に少なくとも 1 つの utf8 文字があり、残りが ASCII である場合、func はそれを utf8 として検出する必要があります。しかし、少なくとも 1 つの utf8 文字が表示されない場合、文字列を utf8 と呼ぶのは間違っています。

編集-それについて何をすべきか? 繰り返しますが、ASCII 文字列は有効な utf8 文字列であるため、両方のタイプで機能する utf8 を使用する必要があります。<metaタグではなく、実際の http ヘッダーを介してこれを宣言してください。

header('content-type:text/html;charset=utf-8');
于 2012-06-03T15:18:18.207 に答える
0

この投稿で戦利品を取ります。

エンコーディングを検出する方法を検索することをお勧めします。

于 2012-06-03T14:20:01.767 に答える