кодировка — PHP | Польские символы — конвертировать UTF-8 в ANSI

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

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

https://3v4l.org/MDcIj

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

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

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

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

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

0

Решение

Если под ANSI вы подразумеваете оригинальную кодировку ASCII, которая поддерживает только английские буквы A-Z, вы можете использовать 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']

Если вместо этого вы имеете в виду Кодовая страница Windows 1250, использовать:

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

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

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

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

0

Другие решения

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

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

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

$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

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

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

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

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

но работает просто отлично 🙂

0
По вопросам рекламы [email protected]