Maison >développement back-end >tutoriel php >Comment gérer correctement les caractères chinois tronqués causés par la conversion hexadécimale en PHP

Comment gérer correctement les caractères chinois tronqués causés par la conversion hexadécimale en PHP

王林
王林original
2024-03-04 17:09:03826parcourir

Comment gérer correctement les caractères chinois tronqués causés par la conversion hexadécimale en PHP

Titre : Résolvez le problème des caractères chinois tronqués causés par la conversion hexadécimale en PHP

Dans le processus d'utilisation de PHP pour la conversion hexadécimale, vous rencontrerez parfois des caractères chinois tronqués. Ce problème est généralement dû à un traitement incorrect du codage chinois lors de la conversion hexadécimale. Cet article explique comment gérer correctement les caractères chinois tronqués provoqués par la conversion hexadécimale en PHP et fournit des exemples de code spécifiques.

1. Analyse du problème

En PHP, nous pouvons utiliser bin2hexhex2binces deux fonctions pour convertir entre binaire et hexadécimal. Cependant, lors du traitement des caractères chinois, si le codage des caractères n'est pas traité correctement, cela entraînera facilement le problème des caractères chinois tronqués. En effet, les caractères chinois sont généralement codés sur plusieurs octets. Si les caractères chinois sont directement convertis en hexadécimal, des caractères tronqués apparaîtront lors de la reconversion.

2. Solution

Afin de gérer correctement la conversion hexadécimale des caractères chinois, nous pouvons d'abord convertir les caractères chinois en données binaires codées en UTF-8, puis effectuer la conversion hexadécimale. Lors de la restauration, vous devez d'abord restaurer les données hexadécimales en données binaires, puis convertir les données binaires codées UTF-8 en caractères chinois.

Le code spécifique est le suivant :

// 将中文字符转换为UTF-8编码的二进制数据
function utf8_str_to_bin($str){
    $arr = preg_split('/(?<!^)(?!$)/u', $str);
    $bin_str = '';
    foreach($arr as $val){
        $bin_str .= pack("H*", bin2hex(mb_convert_encoding($val, 'UTF-16', 'UTF-8')));
    }
    return $bin_str;
}

// 将UTF-8编码的二进制数据转换为中文字符
function bin_to_utf8_str($bin_str){
    $str = '';
    $length = strlen($bin_str);
    for($i = 0; $i < $length; $i++){
        if($bin_str[$i] === '\' && $bin_str[$i + 1] === 'x'){
            $hex = substr($bin_str, $i + 2, 2);
            $str .= mb_convert_encoding(pack('H*', $hex), 'UTF-8', 'UTF-16');
            $i += 3;
        }else{
            $str .= $bin_str[$i];
        }
    }
    return $str;
}

// 示例
$chinese_str = "你好";
$bin_data = utf8_str_to_bin($chinese_str);
$hex_data = bin2hex($bin_data);

echo "原始中文字符:".$chinese_str."<br>";
echo "中文字符转二进制数据:".$bin_data."<br>";
echo "二进制数据转16进制数据:".$hex_data."<br>";

$bin_data_back = hex2bin($hex_data);
$chinese_str_back = bin_to_utf8_str($bin_data_back);

echo "还原中文字符:".$chinese_str_back;

Grâce aux exemples de code ci-dessus, nous pouvons gérer correctement le problème de confusion du chinois causé par la conversion hexadécimale en PHP. J'espère que cet article pourra aider les développeurs confrontés à des problèmes similaires afin que les caractères chinois n'apparaissent plus tronqués lors de la conversion hexadécimale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn