2010-10-10 7 views
1

Je souhaite afficher mes infos Twitter dans mon blog. Alors j'écris du code pour l'obtenir.Impossible d'afficher le caractère chinois dans mon code PHP

le problème que j'ai eu est que les caractères chinois affichés sous forme de code inconnu.

Voici le code de test. Quelqu'un pourrait-il jeter un coup d'oeil et aider? Merci

<html> 
    <title>Twitter Test</title> 
<body> 
<?php 

    function mystique_objectToArray($object){ 
     if(!is_object($object) && !is_array($object)) return $object; 
     if(is_object($object)) $object = get_object_vars($object); 
     return array_map('mystique_objectToArray', $object); 
    } 

define('ABSPATH', dirname(dirname(__FILE__)) . '/'); 

    require_once('/home/jun1st/jun1stfeng.com/wp-includes/class-snoopy.php'); 

    $snoopy = new Snoopy; 
    $response = @$snoopy->fetch("http://twitter.com/users/show/jun1st.json"); 
    if ($response) $userdata = json_decode($snoopy->results, true); else $error = true; 
    $response = @$snoopy->fetch("http://twitter.com/statuses/user_timeline/jun1st.json"); 
    if ($response) $tweets = json_decode($snoopy->results, true); else $error = true; 
    if(!$error): 
     // for php < 5 (included JSON returns object) 
     $userdata = mystique_objectToArray($userdata); 
     $tweets = mystique_objectToArray($tweets); 

     $twitdata = array(); 

     $twitdata['user']['profile_image_url'] = $userdata['profile_image_url']; 
     $twitdata['user']['name'] = $userdata['name']; 
     $twitdata['user']['screen_name'] = $userdata['screen_name']; 
     $twitdata['user']['followers_count'] = $userdata['followers_count']; 
     $i = 0; 
     foreach($tweets as $tweet): 
     $twitdata['tweets'][$i]['text'] = $tweet['text']; 
     $twitdata['tweets'][$i]['created_at'] = $tweet['created_at']; 
     $twitdata['tweets'][$i]['id'] = $tweet['id']; 
     $i++; 
     endforeach; 

    endif; 

    // only show if the twitter data from the database is newer than 6 hours 
     if(is_array($twitdata['tweets'])): ?> 
     <div class="clear-block"> 
     <div class="avatar"><img src="<?php echo $twitdata['user']['profile_image_url']; ?>" alt="<?php echo $twitdata['user']['name']; ?>" /></div> 
     <div class="info"><a href="http://www.twitter.com/jun1st"><?php echo $twitdata['user']['name']; ?> </a><br /><span class="followers"> <?php printf(__("%s followers","mystique"),$twitdata['user']['followers_count']); ?></span></div> 
     </div> 

     <ul> 
     <?php 
      $i = 0; 
      foreach($twitdata['tweets'] as $tweet): 
      $pattern = '/\@(\w+)/'; 
      $replace = '<a rel="nofollow" href="http://twitter.com/$1">@$1</a>'; 
      $tweet['text'] = preg_replace($pattern, $replace , $tweet['text']); 
      $tweet['text'] = make_clickable($tweet['text']); 

      // remove +XXXX 
      $tweettime = substr_replace($tweet['created_at'],'',strpos($tweet['created_at'],"+"),5); 

      $link = "http://twitter.com/".$twitdata['user']['screen_name']."/statuses/".$tweet['id']; 
      echo '<li><span class="entry">' . $tweet['text'] .'<a class="date" href="'.$link.'"  rel="nofollow">'.$tweettime.'</a></span></li>'; 
      $i++; 
      if ($i == $twitcount) break; 
      endforeach; 
     ?> 
     </ul> 
    <? endif?> 
?> 
</body> 
</html> 

Répondre

0

Ajouter cette ligne à l'en-tête de vos fichiers:

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=charset_name"> 

Où charset_name peut être gb2312, big5, utf-8

+0

Je l'ai déjà fait. Cela ne fonctionne pas – fengd

+0

Vérifiez si le codage de vos fichiers est utf-8 ou non. –

+0

C'est utf-8. J'ai déjà vérifié ça :) – fengd

0

je suis tombé sur un problème similaire en utilisant Magpie + Snoopy. Je devais ajouter une ligne comme celui-ci avant de récupérer le RSS:

define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); 

Sinon, je recevais des points d'interrogation à la place des guillemets, et à ce moment-là, aucun montant de épiloguer avec le charset fixerai.

Vous ne savez pas si cela fonctionnera, mais vous pouvez essayer d'ajouter un en-tête "Aceept-Charset" au tableau $ rawheaders dans Snoopy.