|
|
|
| Пытаюсь перекодировать текст из utf-8 в windows-1251, но по ходу не работатет функция ivonv() выдает ошибку типа "Удаленный сервер или файл не найден"
$thistext = $text[1].$text[2].$text[3];
$alltext = iconv("utf-8", "cp1251", $thistext);
|
как быть в такой ситуации? | |
|
|
|
|
|
|
|
для: Blizard
(30.08.2011 в 22:39)
| | видимо это не iconv выдает:) | |
|
|
|
|
|
|
|
для: sl1p
(30.08.2011 в 22:46)
| | мне тоже так кажется, но где ошибка тогда в этих двух строках? точнее во второй?
убираю
$alltext = iconv("utf-8", "cp1251", $thistext);
|
и все начинает работать, ставлю обратно - опять ошибка сервера | |
|
|
|
|
|
|
|
для: Blizard
(30.08.2011 в 22:56)
| | Значит где-то ниже, у вас, идет запрос к другому серверу или файлу с данными из $alltext. Сервер принимает данные в utf-8, а вы ему шлете cp1251. | |
|
|
|
|
|
|
|
для: Drago
(31.08.2011 в 02:44)
| | Вот код конца файла:
$thistext = $text[1].$text[2].$text[3];
$alltext = iconv("utf-8", "cp1251", $thistext);
$fp = fopen("./testml.xml","w");
flock($fp, LOCK_EX);
$fw = fwrite($fp,$alltext);
flock($fp, LOCK_UN);
$fc = fclose($fp);
|
в массиве $text лежит код xml файла, который я генерирую средствами php
Просто проблема в том, что yandex маркет, который качает этот xml файл ругается на кодировку, а если зайти в файл с панели ispmanager и пересохранить его в windows-1251 то все ок становится, но процесс генерации xml файла настроен из крона каждый час, поэтому вручную не вариант, а автоматически проблема с кодировкой. Помогите решить эту задачу. Я уже думал может промежуточно сохранять в .txt файл или в базу куда-то, это может на что-то повлиять? Уже не знаю что делать, застопорился на одном моменте. | |
|
|
|
|
|
|
|
для: Blizard
(31.08.2011 в 11:09)
| | Вы сначала разберитесь что выдает ваше "Удаленный сервер или файл не найден", если это точный текст ошибки, конечно. Сама по себе конвертация кодировки такого не вызывает. | |
|
|
|
|
|
|
|
для: Drago
(31.08.2011 в 11:40)
| | Я поэтому сюда и написал, что не могу разобраться. Убираю одну строку, которая переводит из одной кодировки в другую и все нормально начинает работать, только разумеется не в той кодировке в xml файл пишет . А есть какие-то альтернативные варианты iconv() ? И как проверить включена ли вообще эта функция у меня на сервере в php? | |
|
|
|
|
|
|
|
для: Blizard
(31.08.2011 в 12:04)
| | > И как проверить включена ли вообще эта функция у меня на сервере в php?
Посмотреть phpinfo().
> Я поэтому сюда и написал, что не могу разобраться.
Вы не можете разобраться, что в вашем приложении выдает ошибку? Это ваше приложение? Это точный текст ошибки?
Проблема не в функции iconv(), а в том, что ваше приложение (или не ваше) не может корректно работать с данными в той кодировке, в которой вы пытаетесь ему навязать.
Никто вам конкретно не скажет в чем проблема без детальных подробностей. | |
|
|
|
|
|
|
|
для: Drago
(31.08.2011 в 13:55)
| | Для детальных подробностей могу привести весь код файла:
<?php
header('Content-Type: text/html; charset=cp1251');
$data = date("Y-m-d H:i");
$vop = "?";
$sk[2] = ">";
$sk[1] = "<";
$kov[1] = '"';
$kov[2] = "'";
$text[1] = "
".$sk[1].$vop."xml version=".$kov[1]."1.0".$kov[1]." encoding=".$kov[1]."windows-1251".$kov[1].$vop.$sk[2]."
".$sk[1]."!DOCTYPE yml_catalog SYSTEM ".$kov[1]."shops.dtd".$kov[1].$sk[2]."
".$sk[1]."yml_catalog date=".$kov[1].$data.$kov[1].$sk[2]."
".$sk[1]."shop".$sk[2]."
".$sk[1]."name".$sk[2]."
Тут название компании
".$sk[1]."/name".$sk[2]."
".$sk[1]."company".$sk[2]."
Тут название компании
".$sk[1]."/company".$sk[2]."
".$sk[1]."url".$sk[2]."
http://mysite.ru/
".$sk[1]."/url".$sk[2]."
".$sk[1]."currencies".$sk[2]."
".$sk[1]."currency id=".$kov[1]."RUR".$kov[1]."/".$sk[2]."
".$sk[1]."/currencies".$sk[2]."
".$sk[1]."categories".$sk[2]."
".$sk[1]."category id=".$kov[1]."1".$kov[1].$sk[2]."
Напитки
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."2".$kov[1].$sk[2]."
Креатин
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."3".$kov[1].$sk[2]."
Протеины
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."4".$kov[1].$sk[2]."
Гейнеры
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."5".$kov[1].$sk[2]."
Аминокислоты
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."6".$kov[1].$sk[2]."
Глютамин
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."7".$kov[1].$sk[2]."
BCAA
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."8".$kov[1].$sk[2]."
Гуарана
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."9".$kov[1].$sk[2]."
Углеводы
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."10".$kov[1].$sk[2]."
Нитробустеры
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."11".$kov[1].$sk[2]."
Батончики
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."12".$kov[1].$sk[2]."
HC - Products
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."13".$kov[1].$sk[2]."
L-Carnitine
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."14".$kov[1].$sk[2]."
Энергетики
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."15".$kov[1].$sk[2]."
Витамины
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."16".$kov[1].$sk[2]."
Магний
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."17".$kov[1].$sk[2]."
Анаболики
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."18".$kov[1].$sk[2]."
Восстановители
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."19".$kov[1].$sk[2]."
Термогеники
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."20".$kov[1].$sk[2]."
Для суставов
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."21".$kov[1].$sk[2]."
Специальные препараты
".$sk[1]."/category".$sk[2]."
".$sk[1]."category id=".$kov[1]."22".$kov[1].$sk[2]."
Жиросжигатели
".$sk[1]."/category".$sk[2]."
".$sk[1]."/categories".$sk[2]."
".$sk[1]."offers".$sk[2]."
";
$fil = File("./bd/bd.dat");
foreach($fil as $key => $value)
{
$ex = explode("^",$value);
if (($ex[9] > 0) && ($ex[0] != 0))
{
$cen = $ex[8];
$cex = explode("|",$cen);
$cena = $cex[0];
if ($ex[2] == "Напитки") {$thisid=1;}
if ($ex[2] == "Креатин") {$thisid=2;}
if ($ex[2] == "Протеины") {$thisid=3;}
if ($ex[2] == "Гейнеры") {$thisid=4;}
if ($ex[2] == "Аминокислоты") {$thisid=5;}
if ($ex[2] == "Глютамин") {$thisid=6;}
if ($ex[2] == "BCAA") {$thisid=7;}
if ($ex[2] == "Гуарана") {$thisid=8;}
if ($ex[2] == "Углеводы") {$thisid=9;}
if ($ex[2] == "Нитробустеры") {$thisid=10;}
if ($ex[2] == "Батончики") {$thisid=11;}
if ($ex[2] == "HC - Products") {$thisid=12;}
if ($ex[2] == "L-Carnitine") {$thisid=13;}
if ($ex[2] == "Энергетики") {$thisid=14;}
if ($ex[2] == "Витамины") {$thisid=15;}
if ($ex[2] == "Магний") {$thisid=16;}
if ($ex[2] == "Анаболики") {$thisid=17;}
if ($ex[2] == "Восстановители") {$thisid=18;}
if ($ex[2] == "Термогеники") {$thisid=19;}
if ($ex[2] == "Для суставов") {$thisid=20;}
if ($ex[2] == "Спец. препараты") {$thisid=21;}
if ($ex[2] == "Жиросжигатели") {$thisid=22;}
$text[2] .= $sk[1]."offer id=".$kov[1].$key.$kov[1]." available=".$kov[1]."true".$kov[1].$sk[2]."\r\n";
$text[2] .= $sk[1]."url".$sk[2]."\r\n";
$text[2] .= "http://mysite.ru/tovar.php?id=".$key."\r\n";
$text[2] .= $sk[1]."/url".$sk[2]."\r\n";
$text[2] .= $sk[1]."price".$sk[2]."\r\n".$cena."\r\n".$sk[1]."/price".$sk[2]."\r\n";
$text[2] .= $sk[1]."currencyId".$sk[2]."\r\nRUR\r\n".$sk[1]."/currencyId".$sk[2]."\r\n";
$text[2] .= $sk[1]."categoryId".$sk[2]."\r\n".$thisid."\r\n".$sk[1]."/categoryId".$sk[2]."\r\n";
$text[2] .= $sk[1]."picture".$sk[2]."\r\nhttp://mysite.ru/imgsw/w".$key.".jpg\r\n".$sk[1]."/picture".$sk[2]."\r\n";
$text[2] .= $sk[1]."delivery".$sk[2]."\r\ntrue\r\n".$sk[1]."/delivery".$sk[2]."\r\n";
$text[2] .= $sk[1]."name".$sk[2]."\r\n".$ex[3]."\r\n".$sk[1]."/name".$sk[2]."\r\n";
$text[2] .= $sk[1]."vendor".$sk[2]."\r\n".$ex[1]."\r\n".$sk[1]."/vendor".$sk[2]."\r\n";
$text[2] .= $sk[1]."description".$sk[2]."\r\n".$ex[6]." ".$ex[5]."\r\n".$sk[1]."/description".$sk[2]."\r\n";
$text[2] .= $sk[1]."sales_notes".$sk[2]."\r\nМинимальная сумма заказа - 2000 рублей\r\n".$sk[1]."/sales_notes".$sk[2]."\r\n";
$text[2] .= $sk[1]."/offer".$sk[2]."\r\n";
}
}
$text[3] = $sk[1]."/offers".$sk[2]."
".$sk[1]."/shop".$sk[2]."
".$sk[1]."/yml_catalog".$sk[2]."
";
$thistext = $text[1].$text[2].$text[3];
$fp = fopen("./testml.xml","w");
flock($fp, LOCK_EX);
$fw = fwrite($fp,$thistext);
flock($fp, LOCK_UN);
$fc = fclose($fp);
?>
|
После выполнения генерируется следующий файл (testml.xml):
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2011-08-30 23:13">
<shop>
<name>
Тут название компании
</name>
<company>
Тут название компании
</company>
<url>
http://mysite.ru/
</url>
<currencies>
<currency id="RUR"/>
</currencies>
<categories>
<category id="1">
Напитки
</category>
<category id="2">
Креатин
</category>
<category id="3">
Протеины
</category>
<category id="4">
Гейнеры
</category>
<category id="5">
Аминокислоты
</category>
<category id="6">
Глютамин
</category>
<category id="7">
BCAA
</category>
<category id="8">
Гуарана
</category>
<category id="9">
Углеводы
</category>
<category id="10">
Нитробустеры
</category>
<category id="11">
Батончики
</category>
<category id="12">
HC - Products
</category>
<category id="13">
L-Carnitine
</category>
<category id="14">
Энергетики
</category>
<category id="15">
Витамины
</category>
<category id="16">
Магний
</category>
<category id="17">
Анаболики
</category>
<category id="18">
Восстановители
</category>
<category id="19">
Термогеники
</category>
<category id="20">
Для суставов
</category>
<category id="21">
Специальные препараты
</category>
<category id="22">
Жиросжигатели
</category>
</categories>
<offers>
<offer id="3" available="true">
<url>
http://mysite.ru/tovar.php?id=3
</url>
<price>
2907.00
</price>
<currencyId>
RUR
</currencyId>
<categoryId>
3
</categoryId>
<picture>
http://mysite.ru/imgsw/w3.jpg
</picture>
<delivery>
true
</delivery>
<name>
Weider Premium Whey Protein
</name>
<vendor>
Weider
</vendor>
<description>
банка 2300 г.
</description>
<sales_notes>
Минимальная сумма заказа - 2000 рублей
</sales_notes>
</offer>
</offers>
</shop>
</yml_catalog>
|
код стает нерабочим после замены:
$thistext = $text[1].$text[2].$text[3];
$fp = fopen("./testml.xml","w");
flock($fp, LOCK_EX);
$fw = fwrite($fp,$thistext);
flock($fp, LOCK_UN);
$fc = fclose($fp);
|
на
$thistext = $text[1].$text[2].$text[3];
$alltext = incovn("utf-8","windows-1251",$thistext);
$fp = fopen("./testml.xml","w");
flock($fp, LOCK_EX);
$fw = fwrite($fp,$alltext);
flock($fp, LOCK_UN);
$fc = fclose($fp);
|
| |
|
|
|
|
|
|
|
для: Blizard
(31.08.2011 в 14:52)
| | Я у вас в третий раз спрашиваю, в чем заключается ошибка? Какой скрипт, в какой строке выводит сообщение "Удаленный сервер или файл не найден"?
И кстати, вы уверены, что ваш файл bd/bd.dat изначально в кодировке utf-8? | |
|
|
|
|
|
|
|
для: Drago
(31.08.2011 в 15:12)
| | Попробую перефразировать - если xml файл генерируется средствами php, то yandex маркет говорит об ошибке: Определена кодировка: windows-1251, но текст файла в иной кодировке. Поэтому я и стараюсь записывать с помощью ф-ии incovn() текст в кодировке windows-1251, но при использовании incovn() при обращении к скрипту с браузера выдает ошибку, что страница не найдена, аналогично тому, если обратиться к несуществующей странице. Если убрать функцию incovn() и после того, как файл сгенерирован зайти на хостинг с панели ispmanager и пересохранить его вручную (т.е. зайти в режиме редактирования в файл и нажать ок) то яндекс перестает ругаться. Иными словами так получается вручную перекодировать содержимое xml файла, но ручной вариант мне не подходит. Я не знаю как еще ответить на ваш вопрос - в чем заключается ошибка? =)
Нет, я не уверен, что файл bd/bd.dat изначально в кодировке utf-8, потому что он в кодировке windows-1251
Не знаю, как на других хостингах и на других панелях, но на majordomo в ispmanager у файлов может быть только одна кодировка на всех, если вручную меняю на utf-8, то просто в файлах начинает писать encoding. | |
|
|
|
|
|
|
|
для: Blizard
(31.08.2011 в 15:46)
| | > Нет, я не уверен, что файл bd/bd.dat изначально в кодировке utf-8, потому что он в кодировке windows-1251
И при этом, вы же его пытаетесь сконвертировать из utf в windows-1251.
Прикрепите к сообщению два файла в архиве. Один обработанный iconv, второй нет. | |
|
|
|