PHP |Польские символы - конвертировать UTF-8 в ANSI - PullRequest
0 голосов
/ 23 ноября 2018

Я пытался преобразовать строку UTF-8 в ANSI (Windows-1252).

Вот несколько примеров моих кодов:

https://3v4l.org/MDcIj

Ни один из них не работает, и польские символы имеют вопросительные знаки или диаманты: /

Единственное решение на данный момент - это библиотека: CkCharset Converter , но я не хочу использовать такую ​​большую библиотеку для сохранения одного файла.

Буду благодарен за любую помощь в решении этой проблемы.

Файл со сценарием имеет заголовок и кодировку UTF-8:

header('Content-Type: text/html; charset=utf-8');

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Я думаю, что вам следует транслитерировать строку: заменить нелатинские символы на соответствующие символы латинского алфавита.Насколько я знаю, самое надежное решение - об использовании \ Transliterator из модуля intl .

Работает для широкого спектра языков, в том числе, например, польских, кириллических или китайских символов.Я хотел бы напомнить вам, что ручная замена польских символов не удастся для других языков.

Я думаю, что этот код должен работать для вас:

$rule = ':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;';

$latinString = \Transliterator::createFromRules($rule, \Transliterator::FORWARD)
        ->transliterate($maybePolishString);

Вы можете найти больше информациина странице документации INTL: https://secure.php.net/manual/en/book.intl.php

0 голосов
/ 26 ноября 2018

Спасибо всем за помощь.

iconv('UTF-8', 'Windows-1250//IGNORE', $result)

Без функции // параметра IGNORE, возвращающей ошибку уведомления

Notice: iconv(): Detected an illegal character in input string

, но она работает просто отлично:)

0 голосов
/ 23 ноября 2018

Если под ANSI вы имеете в виду исходную кодировку ASCII, которая поддерживает только английские буквы AZ, вы можете использовать iconv с параметром translit:

php > $txt = "[ 'ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ż' , 'ź', 'Ą', 'Ć', 'Ę', 'Ł', 'Ń', 'Ó', 'Ś', 'Ż', 'Ź']";
php > echo iconv('utf8', 'ascii//translit', $txt);
[ 'a', 'c', 'e', 'l', 'n', 'o', 's', 'z' , 'z', 'A', 'C', 'E', 'L', 'N', 'O', 'S', 'Z', 'Z']

Если вместо этого вы имеете в виду кодовую страницу Windows1250 , используйте:

iconv('utf8', 'windows-1250', $txt);

Если вместо этого вы имеете в виду кодовую страницу DOS 852 , используйте:

iconv('utf8', 'cp852', $txt);

Вы должны проверить, какую кодировку использует ваша биллинговая программа.надеется.Если это DOS-программа 80-х, то, вероятно, cp852, но если это Windows-программа 90-х, то, вероятно, windows-1250.

...