我正在尝试解析一个XML文件(http://jstryczek.blox.pl/rss2)表示其字符集为ISO-8859-2。我的数据库是UTF-8,所以我想把它转换成UTF-8。
为此,我在字符串上运行以下操作:
$content = iconv('ISO-8859-2', 'UTF-8//TRANSLIT', $content);
出于某种原因,我得到了一个奇怪的编码,所以:
Gdzie są różnice
显示为:
Gdzie sÄ róşnice
有没有解释为什么波兰角色没有出现?UTF-8不支持它们吗?
我通过将字符串更改为JSON,然后将所有抛光特殊符号替换为HTML代码来解决此问题。我在下面添加我的结果:
$specialChars = [
''u0105', # ą
''u0107', # ć
''u0119', # ę
''u0142', # ł
''u0144', # ń
''u00f3', # ó
''u015b', # ś
''u017a', # ź
''u017c', # ż
''u0104', # Ą
''u0106', # Ć
''u0118', # Ę
''u0141', # Ł
''u0143', # Ń
''u00d3', # Ó
''u015a', # Ś
''u0179', # Ż
''u017b', # Ż
];
$polishHtmlCodes = [
'ą', # ą
'ć', # ć
'ę', # ę
'ł', # ł
'ń', # ń
'ó', # ó
'ś', # ś
'ź', # ź
'ż', # ż
'Ą', # Ą
'Ć', # Ć
'Ę', # Ę
'Ł', # Ł
'Ń', # Ń
'Ó', # Ó
'Ś', # Ś
'Ź', # Ż
'Ż', # Ż
];
$result = str_replace($specialChars, $polishHtmlCodes, json_encode($string));
var_dump(json_decode($result));
// prints
// e.g. 'Różowe okulary'
看起来,这个文本已经在utf-8中编码了,所以没有必要对它进行解码。当我将这个文件保存到utf-8并运行它时:
<?php
$content = 'Gdzie są różnice';
$content = iconv('ISO-8859-2', 'UTF-8//TRANSLIT', $content);
print $content;
我得到了这个:
Gdzie sÄ róşnice
这正是错误的文本,你明白了。
只需按原样保存文本,它已经是utf-8了。
<?php
$content = 'Gdzie są różnice';
$content = mb_convert_encoding($content, "ISO-8859-2", "UTF-8");
print $content;
?>