[英]Is it possible to invalidate the php utf8_encode / decode function?
[英]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.