一直使用 UTF-8
P粉964682904
2023-08-27 16:00:18
<p>
我正在設定一個新伺服器,並希望在我的 Web 應用程式中完全支援 UTF-8。我過去曾在現有伺服器上嘗試過此操作,但似乎總是最終不得不退回到 ISO-8859-1。 </p>
<p>我到底需要在哪裡設定編碼/字元集?我知道我需要配置 Apache、MySQL 和 PHP 來執行此操作 - 是否有一些我可以遵循的標準檢查表,或者也許可以對發生不匹配的位置進行故障排除? </p>
<p>這適用於運行 MySQL 5、PHP、5 和 Apache 2 的新 Linux 伺服器。 </p>
我想在 chazomaticus 的出色答案中添加一件事一个>:
也不要忘記 META 標籤(像這樣,或 它的 HTML4 或 XHTML 版本):
這看起來微不足道,但 IE7 之前曾經給我帶來過問題。
我所做的一切都是正確的;資料庫、資料庫連接和Content-Type HTTP標頭都設定為UTF-8,在所有其他瀏覽器中都運作良好,但Internet Explorer仍然堅持使用「西歐」編碼。
原來該頁面缺少 META 標記。添加即可解決問題。
編輯:
W3C 其實有一個相當大的專門討論 I18N 的部分。他們有許多與此問題相關的文章 - 描述了 HTTP、(X)HTML 和 CSS 方面的內容:
他們建議同時使用 HTTP 標頭和 HTML 元標記(或在 XHTML 充當 XML 的情況下使用 XML 宣告)。
資料儲存:
Specify the
utf8mb4
character set on all tables and text columns in your database. This makes MySQL physically store and retrieve values encoded natively in UTF-8. Note thatv. #utf8mb4encoding if a
utf8mb4_*collation is specified (without any explicit character set).
utf8
, which only supports a subset of Unicode characters. Iding wish I were kidding .
資料存取:
utf8mb4
. This way, MySQL does no conversion from its no conversion from its native UTF-8 when it hands data off to your application and vice versa.
PDO abstraction layer with PHP ≥ 5.3.6, you can specify charset
in the
DSN:mysqli, you can call set_charset()
:
mysql but happen to be running PHP ≥ 5.2.3, you can call #mysql_set_charset
.
.
The same consideration regardingutf8
applies as above.
UTF-8 should be set in the HTTP header, such as
Content-Type: text/html; charset=utf-8. You can achieve that either by setting-
)。 -
When encoding the output using json_encode(), add
- JSON_UNESCAPED_UNICODE
輸入
:default_charset
in php.ini (preferred), or manually usingheader()
function.如果您的應用程式將文字傳輸到其他系統,它們還需要了解字元編碼。對於 Web 應用程序,必須告知瀏覽器發送資料的編碼(透過 HTTP 回應標頭或
HTML 元資料as a second parameter.
does the trick, but you have to use it religiously. There's really no way around this, as malicious clients can submit data in whatever encoding they want, and I haven' get PHP to do this for you reliably.
:
顯然,您將提供的所有檔案(PHP、HTML、JavaScript 等)都應使用有效的 UTF-8 進行編碼。-
You need to make sure that every time you process a UTF-8 string, you do so safely. This is, unfortunately, the hard part. You'll probably want to make extensive use of PHP's -
- PHP's built-in string operations are
要知道您在做什麼(閱讀:不要搞砸),您確實需要了解 UTF-8 以及它如何在盡可能最低的級別上工作。查看 - utf8.com
mbstring
extension.
not by default UTF-8 safe. There are some things you can safely do with normal PHP string operations (like concatenation) , but for most things you should use the equivalent mbstring function.
中的任何鏈接,獲取一些很好的資源,以了解您需要了解的所有內容。 p>