簡體   English   中英

將html實體轉換為utf-8並將其插入到mysql數據庫中

[英]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_ciutf8_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.

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