簡體   English   中英

PHP:將“'”字符從ISO-8859-1轉換為UTF-8時出現問題

[英]PHP: Problems converting “’” character from ISO-8859-1 to UTF-8

我在使用PHP將ISO-8859-1數據庫內容轉換為UTF-8時遇到了一些問題。 我正在運行以下代碼來測試:

// Connect to a latin1 charset database 
// and retrieve "Georgia O’Keeffe", which contains a "’" character
$connection = mysql_connect('*****', '*****', '*****');
mysql_select_db('*****', $connection);
mysql_set_charset('latin1', $connection);
$result = mysql_query('SELECT notes FROM categories WHERE id = 16', $connection);
$latin1Str = mysql_result($result, 0);
$latin1Str = substr($latin1Str, strpos($latin1Str, 'Georgia'), 16);

// Try to convert it to UTF-8
$utf8Str = iconv('ISO-8859-1', 'UTF-8', $latin1Str);

// Output both
var_dump($latin1Str);
var_dump($utf8Str);

當我在Firefox的源視圖中運行它時,確保Firefox的編碼設置設置為“Western(ISO-8859-1)”,我得到:

ASD

到現在為止還挺好。 第一個輸出包含奇怪的引用,我可以正確看到它,因為它在ISO-8859-1中,因此是Firefox。

將Firefox的編碼設置更改為“UTF-8”后,它看起來像這樣:

ASD

報價在哪里? 是不是iconv()應該將其轉換為UTF-8?

U + 2019右單引號不是ISO-8859-1中的字符。 它是windows-1252中的一個字符,為0x92。 實際的ISO-8859-1字符0x92是一個很少使用的C1控制字符,稱為“私有使用2”。

使用charset標簽ISO-8859-1將Windows-1252文本數據錯誤標記是很常見的。 許多Web瀏覽器和電子郵件客戶端將MIME字符集ISO-8859-1視為Windows-1252字符,以便適應此類錯誤標記,但這不是標准行為,應注意避免在ISO-8859-1中生成這些字符標簽內容。

看來這就是這里發生的事情。 將“ISO-8859-1”更改為“windows-1252”。

這將解決您的問題,假設您的頁眉charset是utf-8:

// Opens a connection to a MySQL server
$connection = mysql_connect ($server, $username, $password);
$charset = mysql_client_encoding($connection);
$flagChange = mysql_set_charset('utf8', $connection);
echo "The character set is: $charset</br>mysql_set_charset result:$flagChange</br>";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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