簡體   English   中英

utf-8到iso-8859-1編碼問題

[英]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進行發布。

我假設以下內容:

  • 您的文件實際上是使用UTF-8編碼的
  • 您的編輯器使用Windows-1252解釋文件

其原因是,你的破折號字符(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.

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