# 1
Тема: Rss и разные кодировки
crueltytanya
Пользователь
МестныйСообщений: 20
Зарегистрирован: 13 Ноября 2008, 07:37:55
Сказали спасибо 0 раз Статус: offline
Опубликовано 05 Декабря 2009, 10:17:29
Дело вот в чем. Стоит плагин RSS, все rss ленты в utf-8, а сайт в win-1251. И тогда получается вот что:
' '
Нашла код:
<?php
error_reporting(0);
if($_GET['url']){
$handle = @fopen($_GET['url'], "r" ) ;
if (!$handle) {header("HTTP/1.0 404 Not Found" ); exit; }
$content = '';
while (!feof($handle)) {
$content .= fread($handle, 8192);
}
fclose($handle);
preg_match('/<\?.+?encoding="(.+?)"/msi', $content, $match);
if($match[1] && strcasecmp($match[1], "utf-8" ) != 0 && strcasecmp($match[1], "utf8" != 0){
$content = preg_replace("/$match[1]/", "utf-8", $content, 1) ;
if($match[1] == "windows-1251" )
$content = win3utf($content);
else
$content = @iconv($match[1], "utf-8", $content);
}
header("Content-Type: text/xml; charset=utf-8" );
echo $content;
exit;
}
function win3utf($s) {
for($i=0, $m=strlen($s); $i<$m; $i++) {
$c=ord($s[$i]);
if ($c<=127) {$t.=chr($c); continue; }
if ($c>=192 && $c<=207) {$t.=chr(208).chr($c-48); continue; }
if ($c>=208 && $c<=239) {$t.=chr(208).chr($c-48); continue; }
if ($c>=240 && $c<=255) {$t.=chr(209).chr($c-112); continue; }
//if ($c==184) { $t.=chr(209).chr(209); continue; };
if ($c==184) { $t.=chr(209).chr(145); continue; };
if ($c==168) { $t.=chr(208).chr(129); continue; };
}
return $t;
}
?>
А как его применить понятия не имею. Подскажите как его можно использовать, а то совсем пхп не знаю.
Нашла это здесь . Помогите пожалуйста.
^ наверх ^
# 2
Dysha
Пользователь
PHP Fusion 6.01.19.4
Любитель FusionСообщений: 158
Откуда: Кузбасс
Зарегистрирован: 21 Апреля 2008, 11:24:11
Сказали спасибо 9 раз Статус: offline
ICQ статус
Опубликовано 05 Декабря 2009, 11:40:27
Найди в коде все строки, которые содержат в себе кодировку utf-8 и замени её на windows-1251!
-------------------- Едет веб-мастер на поезде и слышит: <td>...</td>, <td>...</td>, <td>...</td>
^ наверх ^
1 пользователь сказал спасибо Вам:
crueltytanya
# 3
crueltytanya
Пользователь
МестныйСообщений: 20
Зарегистрирован: 13 Ноября 2008, 07:37:55
Сказали спасибо 0 раз Статус: offline
Опубликовано 14 Декабря 2009, 03:46:55
Попробую. Спасибо огромное!!!!
^ наверх ^
# 4
crueltytanya
Пользователь
МестныйСообщений: 20
Зарегистрирован: 13 Ноября 2008, 07:37:55
Сказали спасибо 0 раз Статус: offline
Опубликовано 14 Декабря 2009, 04:32:58
В плагине не указана кодировка. Это сами ленты в этой кодировке. Что делать. Скажите как можно применить код для перехода с одной кодировки на другую. Код в первом сообщении. Кода его сунуть???
^ наверх ^
# 5
Psc
SF Team
Psc
SF Support Team
Почетный SFСообщений: 2515
Откуда: As is
Зарегистрирован: 10 Ноября 2007, 13:15:07
Сказали спасибо 353 раз Статус: offline
Опубликовано 14 Декабря 2009, 05:25:21
iconv конвертит как бэ.
Нужно только чтоб оно верно работало и все будет.
-------------------- Retired
^ наверх ^
# 6
crueltytanya
Пользователь
МестныйСообщений: 20
Зарегистрирован: 13 Ноября 2008, 07:37:55
Сказали спасибо 0 раз Статус: offline
Опубликовано 16 Декабря 2009, 12:34:43
А можно, пожалуйста, немного подробнее что, куда и как. А то совсем не понимаю.
[Изменил(а) crueltytanya , 16 Декабря 2009, 12:35:00]
^ наверх ^
# 7
crueltytanya
Пользователь
МестныйСообщений: 20
Зарегистрирован: 13 Ноября 2008, 07:37:55
Сказали спасибо 0 раз Статус: offline
Опубликовано 21 Декабря 2009, 04:30:04
Эх, ну подскажите, пожалуйста, как можно все таки применить этот код или предложите какую - нибудь альтернативу.
<?php
error_reporting(0);
if($_GET['url']){
$handle = @fopen($_GET['url'], "r" ) ;
if (!$handle) {header("HTTP/1.0 404 Not Found" ); exit; }
$content = '';
while (!feof($handle)) {
$content .= fread($handle, 8192);
}
fclose($handle);
preg_match('/<\?.+?encoding="(.+?)"/msi', $content, $match);
if($match[1] && strcasecmp($match[1], "utf-8" ) != 0 && strcasecmp($match[1], "utf8"smiley != 0){
$content = preg_replace("/$match[1]/", "utf-8", $content, 1) ;
if($match[1] == "windows-1251" )
$content = win3utf($content);
else
$content = @iconv($match[1], "utf-8", $content);
}
header("Content-Type: text/xml; charset=utf-8" );
echo $content;
exit;
}
function win3utf($s) {
for($i=0, $m=strlen($s); $i<$m; $i++) {
$c=ord($s[$i]);
if ($c<=127) {$t.=chr($c); continue; }
if ($c>=192 && $c<=207) {$t.=chr(208).chr($c-48); continue; }
if ($c>=208 && $c<=239) {$t.=chr(208).chr($c-48); continue; }
if ($c>=240 && $c<=255) {$t.=chr(209).chr($c-112); continue; }
//if ($c==184) { $t.=chr(209).chr(209); continue; };
if ($c==184) { $t.=chr(209).chr(145); continue; };
if ($c==168) { $t.=chr(208).chr(129); continue; };
}
return $t;
}
?>
^ наверх ^
# 8
iceberg
Пользователь
ЗавсегдатыйСообщений: 57
Зарегистрирован: 24 Августа 2009, 19:14:36
Сказали спасибо 2 раз Статус: offline
Опубликовано 21 Декабря 2009, 06:27:30
замени везде где видишь , что написано utf-8 на win-1251 в этом файле. Файл откроешь в блокноте.
[Изменил(а) iceberg , 21 Декабря 2009, 06:29:40]
-------------------- А ты такой холодный ...
^ наверх ^
# 9
crueltytanya
Пользователь
МестныйСообщений: 20
Зарегистрирован: 13 Ноября 2008, 07:37:55
Сказали спасибо 0 раз Статус: offline
Опубликовано 26 Декабря 2009, 11:41:32
Данное предложение уже поступало, но дело в том что это не файл rss, это файл для того чтобы адаптировать rss ленты в utf в win-1251, проблема в том, что я не знаю как применить этот код, вставить его в сам файл rss, либо создать новый файл с этим кодом и связать его с rss файлом. Как редактировать файлы я знаю.
[Изменил(а) crueltytanya , 26 Декабря 2009, 11:42:31]
^ наверх ^