Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Einführung in die Best Practices von PHP und UTF-8
Der Artikel „Strings, Codierung, UTF-8 in PHP“ beschreibt eine Reihe von Grundkenntnissen, die jetzt relativ langweilig sind – die Best Practices für die PHP-String-Verarbeitung. UTF-8“, der zweite Teil des verwandten Wissens. Fazit zuerst – Verwenden Sie UTF-8-Codierung in allen Aspekten von PHP .
Die PHP-Sprachebene unterstützt den Unicode-Zeichensatz nicht, die meisten Probleme können jedoch durch UTF-8-Codierung gelöst werden.
Die beste Vorgehensweise besteht darin, die Eingabekodierung genau zu kennen (sie zu erkennen, wenn Sie sie nicht kennen), sie intern einheitlich in die UTF-8-Kodierung zu konvertieren und die Ausgabekodierung einheitlich in die UTF-8-Kodierung zu konvertieren.
Achten Sie beim Betrieb des Unicode-Zeichensatzes darauf, die mbstring-Erweiterung zu installieren und die entsprechenden Funktionen anstelle der nativen String-Funktionen zu verwenden. Wenn eine Datei beispielsweise als UTF-8-PHP-Code kodiert ist und es falsch ist, die Funktion strlen() zu verwenden, verwenden Sie bitte stattdessen die Funktion mb_strlen().
Die meisten Funktionen der mbstring-Erweiterung müssen auf Basis einer Kodierung (interne Kodierung) verarbeitet werden. Das meiste davon kann in PHP.INI konfiguriert werden.
Ab PHP 5.6 kann die Konfiguration „default_charset“ mbstring.http_input und mbstring.http_output ersetzen.
Eine weitere wichtige Konfiguration ist mbstring.sprache. Der Standardwert ist Neutral (UTF-8).
Beachten Sie, dass die Dateikodierung und die interne Kodierung der MBstring-Erweiterung nicht dasselbe Konzept sind.
Zusammengefasst:
Die Teile von PHP.INI, die die Erweiterung mbstring beinhalten, sollten so weit wie möglich UTF-8 verwenden.
Bitte verwenden Sie mbstring-Erweiterungsfunktionen anstelle nativer String-Manipulationsfunktionen.
Wenn Sie verwandte Funktionen verwenden, stellen Sie bitte sicher, dass Sie die Kodierung der von Ihnen verwendeten Zeichen verstehen. Schreiben Sie bei der Verwendung der entsprechenden Funktionen UTF-8-Kodierungsparameter in die Anzeige. Der dritte Parameter der Funktion htmlentities() zeigt beispielsweise UTF an. 8.
Hier ist ein Beispiel: Wenn Sie eine Datei öffnen möchten, aber nicht wissen, welche Codierung der Dateiinhalt hat, wie gehen Sie damit um?
Die beste Vorgehensweise besteht darin, beim Öffnen einheitlich in UTF-8 zu konvertieren und dann nach dem Ändern des Inhalts wieder in die ursprüngliche Codierung zu konvertieren und in der Datei zu speichern. Schauen Sie sich den Code an:
if ( mb_internal_encoding()!="UTF-8") { mb_internal_encoding("UTF-8"); } $file = "file.txt"; //一个编码为gbk的中文文件 $str= file_get_contents($file); //不管来源是什么编码,统一显示的时候转换为 UTF-8 if (mb_check_encoding($str,"GBK")) $str = mb_convert_encoding($str,"UTF-8",“GBK”); $str ="修改内容"; $str = mb_convert_encoding($str,$srcbm,"UTF-8"); //原样转回去 file_put_contents($file,$str);
Dies ist relativ einfach. Stellen Sie zunächst sicher, dass Ihr MySQL UTF-8 ist. Dann behält der MySQL-Client auch UTF-8 bei, wenn eine Verbindung zu MySQL hergestellt wird. Wenn beide Seiten konsistent sind, treten im Allgemeinen keine Probleme auf.
Wenn Sie interessiert sind, können Sie diesen Artikel lesen
Dies ist auch relativ einfach, das heißt, wenn Ihr Ausgabeinhalt eine Webseite ist, sollte Ihre Zeichenfolgenverarbeitungsausgabe gleichzeitig immer UTF-8 sein, und der Standardzeichensatz ist in PHP.INI auch eindeutig auf UTF-8 eingestellt. Das Meta-Tag von HTML wird ebenfalls explizit als UTF-8 identifiziert.
Ist jetzt alles in Ordnung? Nein, obwohl der Server und der Browser den Benutzern die Verwendung der UTF-8-Kodierung erlauben, ist das Verhalten des Benutzers möglicherweise nicht bindend. Er hat möglicherweise Zeichen in anderen Kodierungen eingegeben oder Dateinamen mit Zeichen in anderen Kodierungen hochgeladen zu tun? Die Kodierung des Benutzers kann über die Funktionen mb_http_input() und mb_check_encoding() ermittelt und dann intern in UTF-8 konvertiert werden. Stellen Sie sicher, dass die endgültige Verarbeitung auf jeder Ebene eine UTF-8-Kodierung ist. Mit anderen Worten: Sie müssen wissen, welche Codierung Ihre Eingabe hat und die Codierung der Steuerausgabe nach der Verarbeitung UTF-8 ist.
Es wird nicht empfohlen, die Direktive mbstring.encoding_translation und die Funktion mb_detect_encoding() zu verwenden. Hat mich lange gefoltert.
Betriebssystembedingt verfügt PHP über unterschiedliche Verarbeitungsmechanismen bei der Verarbeitung von Unicode-Dateinamen.
Unter Linux ist der Dateiname immer UTF-8-codiert, und in der chinesischen Windows-Umgebung ist der Dateiname immer GBK-codiert. Denken Sie daran.
Erklären Sie anhand eines Beispiels:
//命令行程序函数,运行在中文版 Windows 10 操作系统 ,文件编码为 UTF-8 function filenameexample() { $filename = "测试.txt" ; $gbk_filename = iconv("UTF-8","GBK",$filename); file_put_contents($gbk_filename, "测试"); echo file_get_contents($gbk_filename); } function scandirexample() { $arr = scandir("./tmp"); foreach ($arr as $v) { if ($v == "." || $v =="..") continue ; $filename = iconv( "GBK","UTF-8",$v ) ; $content = file_get_contents("./tmp/" . $v ); } }
Wenn Sie kein Programm schreiben möchten, das mit Windows und Linux kompatibel ist, können Sie den Dateinamen mit einem URL-Code versehen, z. B.:
function urlencodeexample() { $filename = "测试2.txt" ; $urlencodefilename = urlencode($filename) ; file_put_contents($urlencodefilename, "测试"); echo file_get_contents($urlencodefilename); }
Wenn Sie PHP zum Herunterladen von Dateien über die Funktion header () verwenden, müssen Sie auch den Browser und das Betriebssystem berücksichtigen (die meisten Benutzer verwenden Windows. Für Chrome kann die Codierung des Ausgabedateinamens UTF-8 sein, und Chrome konvertiert den Dateinamen automatisch in). GBK-Kodierung.
Bei niedrigeren IE-Versionen erbt es die Betriebssystemumgebung. Wenn der heruntergeladene Dateiname also chinesisch ist, muss er in die UTF-8-Kodierung umcodiert werden, andernfalls sieht der Benutzer beim Herunterladen einen verstümmelten Dateinamen. Erklären Sie durch Code:
$agent=$_SERVER["HTTP_USER_AGENT"]; if(strpos($agent,'MSIE')!==false { $filename = iconv("UTF-8","GBK","附件.txt"); header("Content-Disposition: attachment; filename=\"$filename\""); }
以上就是详细介绍PHP 与 UTF-8的最佳实践的内容,更多相关内容请关注PHP中文网(www.php.cn)!