簡體   English   中英

國際化使用utf8_encode()(php函數)的內容最佳實踐

[英]Internationalize content best practices for using utf8_encode() (php function)

為了讓網站接受用戶提交的內容(可能不是英文版)(例如日文版)並將其保存到數據庫中,最好是對所有新內容進行utf8_encode,並在以后檢索時使用utf8_decode?

進一步的信息:我正在使用doctrine,我在嘗試保存或選擇Unicode字符到MySQL數據庫時遇到錯誤:

SQLSTATE [HY000]:常規錯誤:1267操作'='非法混合排序(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)

您不需要使用編碼功能。 您需要做的是確保您是UTF8端到端。 看起來你的數據庫可能正在使用latin1編碼和整理。 您與數據庫的連接也需要是UTF8。 有時,只需在建立連接后立即執行SET NAMES UTF8查詢。

在mysql中運行此命令可能會解決您在上面看到的錯誤,但您仍然需要端到端的UTF8。 然后,您無需對數據執行任何特殊操作。

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

布倫特是對的。 它需要端到端。 這是我的清單:

Apache config:
    AddDefaultCharset UTF-8
    AddCharset UTF-8  .utf8

php.ini:
    default_charset = "utf-8"

MySQL:
    ALTER DATABASE DEFAULT CHARACTER SET utf8;
    ALTER TABLE SomeTableName DEFAULT CHARACTER SET utf8;

PHP/HTML:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    …
    <form … <input type="text" name="some_field" value="<?php echo htmlspecialchars($row['some_field'], ENT_COMPAT, 'UTF-8'); ?>"…

This last one seems the most important. Call this function immediately after the mysql_connect() call:
    mysql_query("SET NAMES 'utf8'");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM