[英]utf-8 to iso-8859-1 encoding problem
我正在嘗試從另一個網站上的rss feed中預覽最新帖子。 Feed是UTF-8編碼的,而網站是ISO-8859-1編碼的。 顯示標題時,我正在使用;
$post_title = 'Blogging – does it pay the bills?';
echo mb_convert_encoding($post_title, 'iso-8859-1','utf-8');
// returns: Blogging ? does it pay the bills?
// expected: Blogging - does it pay the bills?
請注意,我期望的連字符不是正常的負號,而是一些大膽的破折號。 好吧,反正還要長幾個像素。 :)不知道該如何描述它,因為我的鍵盤無法產生該字符...
mb_convert_encoding
僅轉換內部編碼-實際上不會將字符的字節序列從一個字符集更改為另一個字符集。 為此,您需要iconv 。
mb_internal_encoding( 'UTF-8' );
ini_set( 'default_charset', 'ISO-8859-1' );
$post_title = 'Blogging — does it pay the bills?'; // I used the actual m-dash here to best mimic your scenario
echo iconv( 'UTF-8', 'ISO-8859-1//TRANSLIT', $post_title );
或者,就像其他人所說的那樣,只需將超出范圍的字符轉換為html實體。
我懷疑您的意思是Em Dash(—)。 ISO-8859-1不包含此字符,因此將其轉換為該編碼不會有太大的運氣。
您可以使用htmlentities() ,但是我建議將ISO-8859-1移至UTF-8進行發布。
我假設以下內容:
其原因是,你的破折號字符(U + 2014)表示為–
。 這就是使用Windows-1252 (0xE2 = â
,0x80 = €
,0x94 = ”
)解釋該字符的UTF-8代碼字(0xE28094)時得到的結果。 因此,您首先需要修復您的編輯器編碼。
以及原因是?
在您的輸出中是ISO 8859-1不包含EM DASH字符。
可能是破折號(U + 2014),並且您要執行的操作不是轉換編碼,因為連字符是一個不同的字符。 換句話說,您要搜索此類字符並手動替換它們。
更好的是,只需將網站切換為UTF-8。 它在很大程度上與Latin-1吻合,更適合於2009年的網站。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.