2

我正在尝试解析一个 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 不支持它们吗?

4

3 回答 3

6

我通过将字符串更改为 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'
于 2016-05-23T14:02:00.073 回答
2

看来,该文本已经以 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 了。

于 2013-08-24T16:45:57.250 回答
-1
<?php
$content = 'Gdzie są różnice';
$content = mb_convert_encoding($content, "ISO-8859-2", "UTF-8");
print $content;
?>
于 2015-06-01T13:33:24.993 回答