Wie wir alle wissen, belegen unterschiedliche Zeichenkodierungen unterschiedlich viele Bytes im Speicher. Beispielsweise belegen ASCII-codierte Zeichen 1 Byte, UTF-8-codierte chinesische Zeichen 3 Bytes und GBK 2 Bytes. PHP verfügt außerdem über mehrere Funktionen zum Abfangen von Zeichenfolgen, darunter substr und mb_substr, die häufig verwendet werden.
Wenn substr zum Abfangen chinesischer Zeichen verwendet wird, werden verstümmelte Zeichen angezeigt. Dies liegt daran, dass substr von Bytes abgefangen wird. Das heißt, UTF-8-codiertes Chinesisch, das Substr zum Abfangen verwendet, fängt nur 1/3 des Chinesischen ab, und natürlich werden verstümmelte Zeichen angezeigt.
mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) Der Parameter $encoding kann die Kodierung angeben. Wenn er weggelassen wird, wird die interne Zeichenkodierung verwendet.
Wenn Sie das Codierungsformat der Zeichenfolge nicht kennen, können Sie mit mb_detect_encoding Folgendes überprüfen:
$encoding = mb_detect_encoding($string, array("ASCII",'UTF-8 ′,"GB2312′ ,"GBK",'BIG5′));
Dann:
mb_substr ( string $str , int $start [, int $length [, string $encoding ] ] )
Wenn Sie mb_substr selbst implementieren, ist die Effizienz nicht sehr gut
Kodierungsbezogene PHP-Funktionen verwenden
ord(substr($str, $i, 1 )) > 0xa0)
ord($string) gibt den ASC-Code des ersten Zeichens der Zeichenfolge zurück. Dies kann verwendet werden, um festzustellen, ob das erste Zeichen der abgefangenen Zeichenfolge ein chinesisches Zeichen ist Beispielsweise ist ein von gb2312 codierter Text 2 Bytes, utf8 Es sind drei Bytes, das heißt, die Codierung größer als 256 ist chinesische Zeichen:
entspricht chinesischen Zeichen: preg_match_all('/[x80-xff]?. /', $string, $ match);
Match Englisch: preg_match_all("/[/x01-/x7f]+/", $string, $match); 🎜>
iconv ( string $in_charset , string $out_charset , string $str ) Wie GB2312 zu UTF-8: iconv("GB2312","UTF-8",$text)URL-Codierung URL-CodeAlle nicht-alphanumerischen Zeichen außer -_ in der zurückgegebenen Zeichenfolge werden nach der Codierung durch ein Prozentzeichen (%) gefolgt von zwei hexadezimalen Ziffern ersetzt, und Leerzeichen werden als codiert Pluszeichen (+). Diese Kodierung ist die gleiche wie Die Kodierungsmethode für WWW-Formular-POST-Daten ist dieselbe und die Medientyp-Kodierungsmethode für application/x-www-form-urlencoded ist dieselbe. Es ist jedoch zu beachten, dass bei der Kodierung nur ein Teil der URL kodiert werden sollte, da sonst auch Doppelpunkte und Backslashes in der URL maskiert werden. Im Allgemeinen gibt es zwei Methoden der URL-Kodierung: eine ist die traditionelle Kodierung basierend auf GB2312 und die andere ist die Kodierung basierend auf UTF-8. Zum Beispiel:Wir öffnen beispielsweise mit dem Browser Baidu und suchen nach „China“. In der Adressleiste sehen wir:
http://www.baidu .com/s?wd= %E4%B8%AD%E5%9B%BD&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=16&rsv_sug=0&rsv_sug4=302&rsv_sug1=11&inputT=22928
$url = '中国'; echo urlencode($url ); //UTF-8: %E4%B8%AD%E5%9B%BD //GB2312:%D6%D0%B9%FA
Verwandte Empfehlungen:
Konvertierung der PHP-String-Kodierung$url = '中国'; echo $a = urldecode(urlencode($url)) ,' '; echo iconv('gb2312', 'utf-8', $a);
Analyse von PHP-String-Kodierungsproblemen
PHP Regular Judgment String Encoding_PHP Tutorial
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Probleme mit der PHP-String-Kodierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!