- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Вот столкнулся с проблемой.
При разборе XML документа, разборщик возвращает результат в кодировке UTF-8, вне зависимости от кодировки исходного документа. Почитав мануал, понял, что так и должно быть.
Но тогда, почему на php4 результат возвращался в кодировке исходного документа?
Вот простой пример, на php4 возвращает массивы в windows-1251, на php5 - в UTF-8
Конечно можно решить проблему используя iconv. но в этом случае надо будет перебирать массив конвертируя кодировку каждого элемента.
Это только на последней версии 5.20 так, на предыдущих версиях пятерки, отдавало любую кодировку.
Пол дня убил, пока не понял почему граббер перестал работать, не стал мудрить iconv() выполнил перед загрузкой. Ох уж эти хостеры, смена ПО происходит как всегда тайно 😡
А причины такого поведения парсера самому интересны, я списал это на настройки умолчальных кодировок сервера, но раз не у меня одного так, то видимо произошли изменя в php какие-то, раз нестандартная кодировка не проходит.
Не обязательно я целиком конвертирую.
if (preg_match("/\<\?xml\s+.+encoding\=[\"'](.+)[\"'].*\?\>/", $rss, $matches)) {
$rssCharset = strtolower($matches[1]);
} else {
$rssCharset = "utf-8";
}
if ($rssCharset != "utf-8") {
$rss = preg_replace("/(\<\?xml\s+.+encoding\=[\"'])(.+)([\"'].*\?\>)/", "\$1" . "utf-8" . "\$3", $rss);
$rss = iconv($rssCharset, "utf-8", $rss);
}
Дело в том, что необходимо конвертировать именно результат парсинга (массив) в "windows-1251".
XML-документ из win.. в utf конечно одной строкой конвертируется. А уже результат в обратном напрвалении не получится.
mfl добавил 21.02.2008 в 16:10
В общем, вопрос теперь сводится к тому, как перекодировать массив?
Перебирать все значения массива довольно сложно и ресурсоемко, в плане того, что необходимо конвертировать каждое значение в отдельности.
Имеются ли решения перекодировки массива без обхода всех ключей?
Что так и нет ни каких идей по этому поводу?
Яб обошол весь массив и не парился с этим, но дело в том, что массив многомерный :(
mfl, А Вы массивом пользоваться собираетесь? так конвертируйте элементы в момент использования.
вы работаете с xml_parser_create(), по корому в мануале сказано, что он поддерживает на выходе только: ISO-8859-1, UTF-8 and US-ASCI, UTF-8 по-умолчанию...
можно воспользоваться чем-нить типа:
<?php
function array_change_enc( &$item, $key)
{
$item = iconv('UTF-8', 'CP1251', $item);
return true;
}
/*
.... получение массива из xml .....
*/
array_walk_recursive($vals, 'array_change_enc');
?>
а можно просто воспользоваться SimpleXml к примеру
mfl, А Вы массивом пользоваться собираетесь? так конвертируйте элементы в момент использования.
Слишком много элементов, дописывать для каждой переменной в каждом файле долго по времени выйдет. А сам парсер - отдельная функция которая создается в одном файле, потом инклудится.
genbit
Большое спасибо, с array_walk_recursive все так просто.
А SimpleXml разьве работает с cp1251? В мануале про кодировки для SimpleXml, что то вообще не написано.
mfl, незачто
А SimpleXml разьве работает с cp1251? В мануале про кодировки для SimpleXml, что то вообще не написано.
да, работает, да и удобнее он парсера... особенно если использовать xpath