[英]Converting html entities to utf-8 and inserting them into a mysql database
我試圖將字符串從HTML-ENTITIES轉換為UTF-8,然后將編碼后的字符串保存在數據庫中。 html實體是希臘字母,示例如下: νω
現在,我嘗試了數千種不同的方法,從僅使用utf8_encode或html_entity_decode開始,直到現在遇到了mb_convert_encoding()函數。 現在真正的怪異之處是,在轉換我的字符串然后輸出它時,它正確地編碼為utf-8,但是當將此字符串插入到我的數據庫中時,我最終得到的結果是: ξÏνω
。
這是編碼的代碼:
header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding('utf-8');
......
while($arr = $select->fetch_array(MYSQLI_ASSOC))
{
$text = $arr["greek"];
$result = mb_convert_encoding($text, 'UTF-8', 'HTML-ENTITIES');
$mysqli->query("UPDATE some SET greek = '".$result."'");
}
當輸出我的查詢,然后在phpmyadmin中手動執行sql查詢時,它工作正常,因此這似乎不是我的數據庫的問題。 將編碼后的字符串傳輸到我的數據庫時肯定有一些問題。
如您在腳本中所看到的,您正在指示瀏覽器使用UTF8。 那是第一步。
但是,您的數據庫需要做同樣的事情,並且表上的編碼/排序規則也必須是UTF8。
您可以使用utf8_general_ci
或utf8_unicode_ci
作為排序utf8_unicode_ci
來重新創建表,或者轉換現有表(請參見此處 )
您還需要確保您的數據庫連接(即mysql的php代碼)正在使用UTF8。 如果您使用的是PDO,那么會有很多文章介紹如何做到這一點。 最簡單的方法是:
$mysqli->query('SET NAMES utf8');
注意您現在所做的更改是最終的。 如果更改數據庫的連接編碼,則可能會影響現有數據。
編輯您可以執行以下操作來設置連接
$mysqli = new mysqli($host, $user, $pass, $db);
if (!$mysqli->set_charset("utf8")) {
die("Error loading character set utf8: %s\n", $mysqli->error);
}
$mysqli->close();
感興趣的鏈接:
請先執行SET NAMES 'utf8'
查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.