2011-07-29 199 views
-1

我需要在數據庫中存儲特殊字符●。編碼● php中的特殊字符

我這樣做:

htmlentities($text,ENT_QUOTES,'UTF-8') 

的原因,我不明白炭●沒有得到編碼,它仍然在其「正常」(●)的形式,而不是它的編碼(●)形式,它看起來像這個字符是UTF-8字符集的一部分,但我需要在數據庫中編碼(●)。我不能使用其他字符集,因爲我需要UTF-8。

爲什麼會發生這種情況?

感謝

編輯:這不是一個關於編碼或不在數據庫中編碼字符的討論,我想知道爲什麼那個特定的字符被完全忽略。

+0

你提到PHP,但你使用了什麼特定類型的數據庫? MySQL的? – Dan

+6

爲什麼你需要對它進行編碼以將其存儲在數據庫中? – deceze

+0

deceze問一個很好的問題。當你存儲它們時,不要擔心編碼問題:將數據存儲爲原始數據,然後在HTML中顯示時使用'htmlentities()'對其進行編碼。 – Dan

回答

2

可以使用多字節功能,您的UTF-8字符串轉換爲美國ASCI而一個字符引用代替任何非ASCII字符:

mb_substitute_character('entity'); 
$ascii = mb_convert_encoding($utf8, 'ASCII', 'UTF-8'); 

雖然我看不出有任何理由要做到這一點。您的數據庫不會將任何字符串解釋爲HTML。

0

具有最廣泛的一套HTML實體的內置函數可能mb_convert_encoding

<?php 
// Assuming UTF-8 input: 
echo mb_convert_encoding('●', 'HTML-ENTITIES', 'UTF-8'); 

在任何情況下,一旦你存儲純文本和HTML,就很難拿回來純文本(或者如果規格改變,則重新編碼它)。我建議保存原樣。