簡體   English   中英

使用PHP / Mysql的UTF-8,XML和htmlentities

[英]UTF-8, XML, and htmlentities with PHP / Mysql

我在網絡上發現了很多與此主題相關的信息,因此我希望有人可以幫助我解決以下問題:

我需要一個函數來清洗字符串,以便可以安全地插入utf-8 mysql數據庫或寫入utf-8 XML文件。 無法刪除不能轉換為utf-8的字符。

為了寫入XML文件,我還遇到了將html實體轉換為數字實體的問題。 htmlspecialchars()幾乎一直都能工作,但是我已經讀到它不足以正確清理所有字符串,例如,其中包含無效的html實體的字符串。

感謝您的幫助,布萊恩

您沒有說明字符串的來源,但是如果要從HTML表單提交中獲取字符串,請參閱本文:

在Internet Explorer表單提交中設置字符編碼

簡而言之,您需要明確告知瀏覽器要將表單提交到的字符集。如果指定UTF-8,則永遠不要從瀏覽器獲取無效的UTF-8。 如果您想保護自己免受任何類型的惡意攻擊,則需要使用iconv:

http://www.php.net/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.

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