我正在尝试在其他网站上预览来自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?
请注意,我所期望的连字符不是正常的减号,而是一些大屁股。好吧,反正还要几个像素。 :)不确定如何描述它,因为我的键盘无法生成该字符......
答案 0 :(得分:5)
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实体。
答案 1 :(得分:3)
我怀疑你的意思是Em Dash( - )。 ISO-8859-1不包含此字符,因此您不会很幸运将其转换为该编码。
您可以使用htmlentities(),但我建议将ISO-8859-1移至UTF-8进行发布。
答案 2 :(得分:3)
我想以下几点:
原因是您的 EM DASH 字符(U + 2014)由–
表示。这正是您使用Windows-1252(0xE2 = â
,0x80 = €
,0x94 = ”
解释该字符(0xE28094)的UTF-8代码字时所获得的结果)。所以你首先需要修改你的编辑器编码。
输出中?
的原因是ISO 8859-1不包含 EM DASH 字符。
答案 3 :(得分:1)
它可能是一个短划线(U + 2014),你要做的是不转换编码,因为连字符是一个不同的字符。换句话说,您要搜索此类字符并手动替换它们。
更好的是,只需将网站切换为UTF-8即可。它主要与Latin-1相符,更适合2009年的网站。