我试图从预览在其他网站上的RSS提要的最新帖子。 饲料是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?
请注意,我期待的连字符是不是正常的减号,但一些大屁股超级冲刺。 好了,几个像素更长的反正。 :)不知道怎么回事,来形容它作为我的键盘不能产生字符...
我怀疑你的意思是一个破折号( - )。 ISO-8859-1不包括该字符,所以你不会有很多运气它转换成该编码。
你可以使用ヶ辆() ,但我建议ISO-8859-1移动关闭以UTF-8出版。
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实体。
我想以下几点:
- 您的文件实际上是用UTF-8编码
- 你的编辑解释了Windows 1252的文件
其原因是,你的破折号字符(U + 2014)表示为–
。 这正是当你解释该字符(0xE28094)的UTF-8码字什么你的Windows 1252 (0xE2 = â
,0x80的= €
,0x94的= ”
所以,你首先需要确定你的编辑器的编码。
而对于原因?
在你的输出是ISO 8859-1不包含破折号字符。
这也可能是一个破折号(U + 2014),以及你想要做什么是不转换编码,因为连字符是一个不同的角色。 换句话说,你要搜索这样的人物,手动替换它们。
更重要的是,该网站只需切换到UTF-8。 它在很大程度上与Latin-1的一致,更适合于2009年的网站。