recherche

Maison  >  Questions et réponses  >  le corps du texte

Les méthodes mb_detect_encoding et mb_convert_encoding en PHP posent des problèmes d'encodage et de transcodage

  1. La valeur de retour obtenue en utilisant mb_detect_encoding est cp936. Cela correspond-il à GBK ?

  2. Après le transcodage via mb_convert_encoding, bien que le texte soit affiché normalement, lors de l'utilisation de mb_detect_encoding pour détecter le format d'encodage du texte, il s'agit toujours de cp936 et n'a pas changé. Pourquoi cela ?

Le code est le suivant :

$file_contents = fread($file,$fileSize);

$typeofData = mb_detect_encoding($file_contents,array("GBK","GB2312","UTF-8","ASCII","BIG5"));

if ($typeofData != "UTF-8"){
//    $file_contents = iconv("GBK","UTF-8",$file_contents);
    $file_contents = mb_convert_encoding($file_contents,"UTF-8","GBK");
}

echo  mb_detect_encoding($file_contents,array("GBK","GB2312","UTF-8","ASCII","BIG5"))."<br/>";
echo $file_contents;
高洛峰高洛峰2868 Il y a quelques jours493

répondre à tous(1)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:16:00

    La page de codes de GBK est CP936.
    Je l'ai essayée avec PHP5 et PHP7 sur Ubuntu Après la conversion en codage UTF-8, UTF-8 peut être détecté :

    .
    <?php
    $str = file_get_contents('/path/to/gbk.txt'); //GBK编码的文本文件
    $order = array('GB2312', 'GBK', 'GB18030', 'UTF-8', 'ASCII', 'BIG5');
    $encode = mb_detect_encoding($str, $order, true); //可见CP936(即GBK)
    $str = mb_convert_encoding($str, 'UTF-8', $encode); //转成UTF-8
    echo mb_detect_encoding($str, $order, true); //输出UTF-8

    répondre
    0
  • Annulerrépondre