Работая в PHP 5, я попробовал следующие две команды для загрузки из строки ISO-8859-1 в базу данных UTF-8, которая ссылается на веб-страницы UTF-8:
$data[] = utf8_encode((string)$child);
… или же:
$data[] = convertToUtf8((string)$child);
function convertToUtf8($text) {
// cURL('http://'.$url);
preg_match('/<meta.*?charset=(|\")(.*?)("|\")/i', $html, $matches);
$charset = $matches[2];
if($charset)
return mb_convert_encoding($text, 'UTF-8', $charset);
else
return $text;
}
Если я выполняю сценарий PHP напрямую, получая доступ к файлу из браузера, любой из этих вариантов работает как шарм: импортированный «é» — это его симпатичная французская сущность. ОДНАКО, когда я пытаюсь выполнить тот же сценарий из SSH-терминала Unix (cron job ИЛИ командная строка), он не преобразует код, поэтому «é» отображается как «Ã ©».
Есть идеи?? Я попытался удалить задание cron и заменить скрипт, чтобы убедиться, что код проходил. Это сводит с ума!
Обновление — решение
Оказывается, эта конкретная функциональность требует более поздней версии PHP. Выполнение его в терминале с помощью следующей команды (и написание команды как таковой в задании cron) решает проблему:
php5.4 xmluploader.php
Что ж, по пути мне, конечно, пришлось изучить некоторые идеи кодирования, но в конце концов, решение было довольно смущающим.
Я выполнял работу, набрав
php myjob.php
Это не было началом, потому что версия по умолчанию на моем сервере была слишком примитивной и не содержала функций utf8_encode или mb_convert_encoding. Поэтому сейчас я запускаю задание с помощью следующей команды:
php5.4 myjob.php
… и это работает как шарм.
Других решений пока нет …