处理字符编码的twitter响应

时间:2012-06-03 13:27:18

标签: php magento twitter character-encoding

我正在构建一个与Twitter API交互的应用程序。

到目前为止,我的代码正确处理了响应,我对我与搜索API交互的方式感到满意。但是,当涉及Twitter API响应的实际内容时,我感到困惑。

现在,我使用原子搜索搜索具有特定hastags的推文,即

$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吗?我很丢失在这里。我已经坚持了很多年,并且非常感谢这里的一些帮助。

此致

安德鲁

2 个答案:

答案 0 :(得分:2)

utf8是专门设计的,因此ascii是它的一个合适的子集。这样做是为了向后兼容。

检测编码的函数,通常在检查字节值后通过受过教育的猜测来完成。如果有问题的字符串只包含ascii字符,则可以将其命名为ascii或utf8。同样,这是因为ascii字符串是一个有效的utf8字符串。

调用纯粹的ascii字符串“ascii”更有意义,因为它更具体,而且在猜测时,如果你遇到的只是ascii字符,你只能确定它是ascii。如果字符串中至少有一个utf8字符,其余字符为ascii,则func应将其检测为utf8。但是,如果没有看到至少一个utf8字符,则调用字符串utf8将是错误的。

编辑 - 至于该怎么办?同样,ascii字符串是一个有效的utf8字符串,所以你应该使用utf8,因为这将适用于这两种类型。确保通过真实的http标头声明,而不是<meta标签。

header('content-type:text/html;charset=utf-8');

答案 1 :(得分:0)

this post处获取战利品。

您可能希望搜索检测编码的方法。