Heim  >  Artikel  >  Backend-Entwicklung  >  So gehen Sie richtig mit verstümmelten chinesischen Zeichen um, die durch die Hexadezimalkonvertierung in PHP verursacht werden

So gehen Sie richtig mit verstümmelten chinesischen Zeichen um, die durch die Hexadezimalkonvertierung in PHP verursacht werden

王林
王林Original
2024-03-04 17:09:03743Durchsuche

So gehen Sie richtig mit verstümmelten chinesischen Zeichen um, die durch die Hexadezimalkonvertierung in PHP verursacht werden

Titel: Lösen Sie das Problem chinesischer verstümmelter Zeichen, die durch die Hexadezimalkonvertierung in PHP verursacht werden.

Bei der Verwendung von PHP für die Hexadezimalkonvertierung werden Sie manchmal auf chinesische verstümmelte Zeichen stoßen. Dieses Problem wird normalerweise durch eine fehlerhafte Verarbeitung der chinesischen Kodierung bei der Hexadezimalkonvertierung verursacht. In diesem Artikel erfahren Sie, wie Sie durch die Hexadezimalkonvertierung in PHP verursachte verstümmelte chinesische Zeichen korrekt verarbeiten, und stellen spezifische Codebeispiele bereit.

1. Problemanalyse

In PHP können wir bin2hexhex2bindiese beiden Funktionen verwenden, um zwischen binär und hexadezimal zu konvertieren. Wenn jedoch bei der Verarbeitung chinesischer Zeichen die Zeichenkodierung nicht korrekt verarbeitet wird, kann es leicht zu Problemen mit verstümmelten chinesischen Zeichen kommen. Dies liegt daran, dass chinesische Zeichen normalerweise in mehreren Bytes codiert werden. Wenn chinesische Zeichen direkt in Hexadezimalzahlen umgewandelt werden, werden bei der Rückkonvertierung verstümmelte Zeichen angezeigt.

2. Lösung

Um die Hexadezimalkonvertierung chinesischer Zeichen korrekt durchzuführen, können wir zunächst die chinesischen Zeichen in UTF-8-codierte Binärdaten konvertieren und dann die Hexadezimalkonvertierung durchführen. Beim Wiederherstellen müssen Sie zunächst die Hexadezimaldaten in Binärdaten wiederherstellen und dann die UTF-8-codierten Binärdaten in chinesische Zeichen konvertieren.

Der spezifische Code lautet wie folgt:

// 将中文字符转换为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;

Durch die obigen Codebeispiele können wir das durch die Hexadezimalkonvertierung in PHP verursachte Problem der chinesischen Verstümmelung korrekt lösen. Ich hoffe, dass dieser Artikel Entwicklern bei ähnlichen Problemen helfen kann, damit chinesische Schriftzeichen bei der Hexadezimalkonvertierung nicht mehr verstümmelt erscheinen.

Das obige ist der detaillierte Inhalt vonSo gehen Sie richtig mit verstümmelten chinesischen Zeichen um, die durch die Hexadezimalkonvertierung in PHP verursacht werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn