Конвертация кодировки новостного информера UTF-8 -> cp-1251

ДБ
На сайте с 16.04.2008
Offline
93
9640

Здравствуйте.

Поставил на свой сайт новостной информер с другого сайта (newsland.ru). Все в нем мне нравиться, кроме того, что новости он передает в UTF-8. А моя страничка сделана в cp-1251. Это приводит к тому, что Эксплорер и Сафари показывают нормально, а ФайрФокс и Опера - показывают или знаки вопроса или квадратики.

В саппорте newslanda мне сказали, что можно конвертить кодировку с помощью php скриптов. Так как сам в этом ничего не понимаю, прошу не бесплатной помощи. Однако, сначала хочу прицениться, просто если это будет слишком дорого - придется искать другой источник новостной ленты.

Прошу предложения или в личку или в аську 126-566-343

Заранее благодарен.

Дизайн полиграфии (https://trukhanov.pro/) и сайтов, большой опыт.
K
На сайте с 31.05.2007
Offline
31
#1

За такое даже стыдно деньги брать, на php в том месте где нужно перекодировать, ставите:

<?$Win1251=iconv("UTF-8","WINDOWS-1251",$UTF8);?>
где $UTF8 - строка в которой содержится текст в юникод, а $Win1251 - будет перекодированная строка. Вывод командой echo, например:

<? echo $Win1251;?>
ДБ
На сайте с 16.04.2008
Offline
93
#2

Большое спасибо за ответ, однако ввиду моей далекости от программирования, я не понимаю как совместить эти строки php-кода с java-script который импортирует новости :(

Если Вы согласитесь помочь я могу показать этот ява-скрипт.

M
На сайте с 19.06.2008
Offline
26
#3

возможно вам поможет явное указание кодировки текста из ява-скрипта..

пример:

<script encoding=windows-1251 src=...

ДБ
На сайте с 16.04.2008
Offline
93
#4
mrdamage:
возможно вам поможет явное указание кодировки текста из ява-скрипта..
пример:
<script encoding=windows-1251 src=...

Нет, попробовал, не помогает :(

Господа, я подумал, что может быть мне стоит обозначить за эту работу какую-нибудь сумму. Так как я даже представить не могу сколько это может стоить, я исхожу из того, что сказал kiragaz. Из его сообщения я понял, что это достаточно простая работа.

Поэтому я предлагаю небольшую сумму, 300 ЯД. Связь таже - личка, аська.

Буду очень благодарен за помощь.

K
На сайте с 31.05.2007
Offline
31
#5

Делать надо так:


<?
function OpenURL($url)
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$get_row_urlink = curl_exec($ch);
curl_close($ch);
return $get_row_urlink;
}
$url='урл указанный в src JavaScript в (одинарные кавычки не убирать)';
$rowData=OpenURL($url);
$Win1251=iconv("UTF-8","WINDOWS-1251",$rowData);
echo '<script>',$Win1251,'</script>';
?>

Единственное, Ваш хостинг должен поддерживать CURL (обычно поддерживает).

ДБ
На сайте с 16.04.2008
Offline
93
#6

Господа, большое спасибо всем за помощь. Проблему решили. Если кому-то интересно решение состоит из двух частей:

Первая часть отдельным файлом выкладывается в ту же директорию, где будет находиться страница, с которой будет происходить вызов скрипта.

Вот код первой части:


<?php
function utf8_win ($s){
$out="";
$c1="";
$byte2=false;
for ($c=0;$c<strlen($s);$c++){
$i=ord($s[$c]);
if ($i<=127) $out.=$s[$c];
if ($byte2){
$new_c2=($c1&3)*64+($i&63);
$new_c1=($c1>>2)&5;
$new_i=$new_c1*256+$new_c2;
if ($new_i==1025){
$out_i=168;
}else{
if ($new_i==1105){
$out_i=184;
}else {
$out_i=$new_i-848;
}
}
$out.=chr($out_i);
$byte2=false;
}
if (($i>>5)==6) {
$c1=$i;
$byte2=true;
}
}
return $out;
}

$fp = fopen("http://www.newsland.ru/public/export/content.php?q=5&t=72-18-37-51-64", "r"); // Это вызов новостей с Ньюзленда
if ($fp)
{
while (!feof($fp))
{
$mytext = fgets($fp, 999);
echo utf8_win($mytext);
}
}
else echo "Ошибка при открытии файла";
fclose($fp);
?>

Вторая часть - собственно код, который стоит на странице и должен показывать информер


<script src=http://www.newsland.ru/public/export/common.js></script>
<script src=nls.php></script> <!-- Это название файла с первой частью -->
<script>
ar=new Array; ar['m_it']='Новости от Newsland'; str=''; for (i in ar) { if ((aObj=eval(i)) && (aObj.length>0)) { for (ii=0;ii<aObj.length;ii++) { str+='<p style="font-size: 10px; font-family: Verdana, Arial,Helvetica, sans-serif">';str+=aObj[ii].d_day+'.'+aObj[ii].d_month+'.'+aObj[ii].d_year+' ('+aObj[ii].d_time+')<br>';str+='<a href='; str+='http://www.newsland.ru'; str+=aObj[ii].url; str+=' target=_blank style="color: 000080; font-size: 10px;"><strong>'; str+=aObj[ii].tit; str+='</strong></a><br>'; str+=aObj[ii].cnt; str+='</p>'; } } } document.write(str);
</script>

Не знаю на сколько это решение оптимальное, но оно работает.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий