[英]UTF-8, XML, and htmlentities with PHP / Mysql
我在網絡上發現了很多與此主題相關的信息,因此我希望有人可以幫助我解決以下問題:
我需要一個函數來清洗字符串,以便可以安全地插入utf-8 mysql數據庫或寫入utf-8 XML文件。 無法刪除不能轉換為utf-8的字符。
為了寫入XML文件,我還遇到了將html實體轉換為數字實體的問題。 htmlspecialchars()幾乎一直都能工作,但是我已經讀到它不足以正確清理所有字符串,例如,其中包含無效的html實體的字符串。
感謝您的幫助,布萊恩
您沒有說明字符串的來源,但是如果要從HTML表單提交中獲取字符串,請參閱本文:
簡而言之,您需要明確告知瀏覽器要將表單提交到的字符集。如果指定UTF-8,則永遠不要從瀏覽器獲取無效的UTF-8。 如果您想保護自己免受任何類型的惡意攻擊,則需要使用iconv:
$ utf_8_string = iconv($ from_charset,$ to_charset,$ original_string);
如果您將$ from_charset和$ to_charset都指定為“ utf-8”,則在$ original_string包含無效的UTF-8的情況下,iconv()應該返回錯誤。
如果您是從其他來源獲取字符串,並且知道字符編碼,則仍然可以使用iconv()。 美國的典型編碼是CP-1252(Windows)和ISO-8859-1(其他所有編碼)。
像這樣嗎
function cleanse($in) {
$bad = Array('”', '“', '’', '‘');
$good = Array('"', '"', '\'', '\'');
$out = str_replace($bad, $good, $in);
return $out;
}
您可以使用iconv或mbstring將字符串從任何編碼轉換為UTF-8:
// With the //IGNORE flag, this will ignore invalid characters
iconv('input-encoding', 'UTF-8//IGNORE', $the_string);
要么
mb_convert_encoding($the_string, 'UTF-8', 'input-encoding');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.