PHP: Как записать файл на диск с символами Юникода

Мне нужно записать файл на диск со специальными символами ISO-8859-15. Для собственных целей тестирования я использовал:

- ©®±àáâãäåæÒÓÔÕÖ¼½¾§μçðþú-.jpg

... но дроби em-dash, en-dash, а также дроби 1/2, 1/4 и 3/4 были заменены на мусор, когда файл записывался на диск с этим именем, а остальные символы в файле имя было написано правильно. Почему одни, а не другие???

Вот очень простой PHP-скрипт для записи файла с только символами авторского права и тире в его имени. Когда я запускаю его, строка записывается в файл правильно, но тире имени файла заменяются мусором:

<?php
    // First, create a text file with the em-dash and the copyright symbol, then put the file prefix into the file:
    $filename1 = "000—©—©.txt";
    $content1 = "000—©—©";
    file_put_contents($filename1, $content1);
?>

Какой самый эффективный и элегантный способ сделать это с помощью PHP (или Javascript)? Я нацеливаюсь ТОЛЬКО на набор символов ISO-8859-15.

Большое спасибо! Том

1 ответ

Я нашел свой ответ. Для начала мне нужна кодировка WINDOWS-1252. Во-вторых, все, что мне нужно сделать, это использовать inconv(), конвертируя из 'UTF-8' в 'WINDOWS-1252', вот так:

<?php
    // First, create a text file with the em-dash and the copyright symbol, then put the file prefix into the file:
    $filename1 = "000—©—©.txt";
    $content1 = "000—©—©";

    // Judicious use of iconv() does the trick:
    $filename1 = iconv('UTF-8', 'WINDOWS-1252', $filename1);
    file_put_contents($filename1, $content1);
?>

Мой единственный вопрос, при условии, что я тестирую это на XAMPP на моем локальном компьютере с Windows, заключается в том, будет ли кодировка WINDOWS-1252 работать на реальных серверах в основных службах хостинга (GoDaddy и т. Д.). Если нет, есть ли другая кодировка? который поддерживает все, что включено в WINDOWS-1252, но лучше подходит для локальных серверов, отличных от XAMPP?

Здесь есть полный список кодировок, поддерживаемых iconv. Некоторые из них находятся на одной линии с WINDOWS-1252; это означает, что они взаимозаменяемы?

Большое спасибо, Том

Другие вопросы по тегам