Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 15:26   #1
ckopnio
 
Регистрация: 25.10.2010
Сообщений: 7
По умолчанию Проблема с парсером

Здравствуйте. Есть скрипт который берёт текст с другой страницы. Проблема в том что на той странице часть текста закодирована. Например:
В браузере:

Зачем ты, грозный аквилон,
Тростник прибрежный долу клонишь?
Зачем на дальний небосклон
Ты облачко столь гневно гонишь?

А через грабер получаю:

AF9E6377152224FA347E80BE406C4D5E200 226DF3D7A7C6D75427794C8F433200D6649 736374A16A052F0128015F795B659B7E7E2 C2FFD023656714F5A689B9AE800282D2369 8C7343BC47592605221734B073607F426B5 22E100CDDE94540BE657F6A65022D0EF815 4B7A4B709B797D223E3006FD5B724A4A6C5 8A8EFCDC5D0

Можно ли это раскодировать на лету? Тоесть скрипт обращается к странице получает код и превращает в текст.
ckopnio вне форума Ответить с цитированием
Старый 25.10.2010, 15:43   #2
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

интересно....
можете адрес сайта дать ?
ssdm вне форума Ответить с цитированием
Старый 25.10.2010, 15:47   #3
ckopnio
 
Регистрация: 25.10.2010
Сообщений: 7
По умолчанию

http://pushkin.niv.ru/pushkin/text/stihi/sort-name.htm

Почти в каждом стихотворении такая муть.
ckopnio вне форума Ответить с цитированием
Старый 25.10.2010, 15:53   #4
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Ну то что получаешь надо пропустить через аналог этой функции
Код:
function na(s) {
var kod1=new Array(209,224,205,255,207,243,248,234,232,237,216,243,208,232,202);
var kod2=new Array();
var n1=location.pathname.lastIndexOf('/');
var n2=location.pathname.lastIndexOf('\\');
if(n2>n1) {n1=n2};
var s2=location.pathname.substring(n1+1);
for(i=0;i<s2.length;i++) {kod2[i]=s2.charCodeAt(i)};
s=s.substring(s.lastIndexOf(' ')+1);
var ss='';var i1=0;var i2=0;
for(i=0;i<s.length;i+=2) {
var k=parseInt(s.substring(i,i+2),16);
var k1=kod1[i1];i1++;if(i1>=kod1.length) {i1=0};
var k2=kod2[i2];i2++;if(i2>=kod2.length) {i2=0};
k=k^k1;k=k^k2;if(k>=192) {k=848+k};if(k==168) {k=1025};if(k==184) {k=1105};if(k==185) {k=78};
if(k!=13) {ss=ss+'&#'+k+';'}
}
document.write(ss);
}

Последний раз редактировалось ssdm; 25.10.2010 в 15:58.
ssdm вне форума Ответить с цитированием
Старый 25.10.2010, 16:03   #5
ckopnio
 
Регистрация: 25.10.2010
Сообщений: 7
По умолчанию

Где-то ошибка (Parse error: syntax error, unexpected ')', expecting '&' or T_VARIABLE in Z:\home\pushkin\www\Untitled-7.php on line 3)

Или я что-то не так понимаю.
ckopnio вне форума Ответить с цитированием
Старый 25.10.2010, 16:07   #6
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

А код то покажешь ? Или мы тут все телепаты ? ))
ssdm вне форума Ответить с цитированием
Старый 25.10.2010, 16:13   #7
ckopnio
 
Регистрация: 25.10.2010
Сообщений: 7
По умолчанию

Стоп. Сначала.
Цитата:
Сообщение от ssdm Посмотреть сообщение
Ну то что получаешь надо пропустить через аналог этой функции
Код:
function na(s) {
var kod1=new Array(209,224,205,255,207,243,248,234,232,237,216,243,208,232,202);
var kod2=new Array();
var n1=location.pathname.lastIndexOf('/');
var n2=location.pathname.lastIndexOf('\\');
if(n2>n1) {n1=n2};
var s2=location.pathname.substring(n1+1);
for(i=0;i<s2.length;i++) {kod2[i]=s2.charCodeAt(i)};
s=s.substring(s.lastIndexOf(' ')+1);
var ss='';var i1=0;var i2=0;
for(i=0;i<s.length;i+=2) {
var k=parseInt(s.substring(i,i+2),16);
var k1=kod1[i1];i1++;if(i1>=kod1.length) {i1=0};
var k2=kod2[i2];i2++;if(i2>=kod2.length) {i2=0};
k=k^k1;k=k^k2;if(k>=192) {k=848+k};if(k==168) {k=1025};if(k==184) {k=1105};if(k==185) {k=78};
if(k!=13) {ss=ss+'&#'+k+';'}
}
document.write(ss);
}
Нужен аналог. Это я понял. Но что эта функция
делает? На каком языке она сейчас написана?
ckopnio вне форума Ответить с цитированием
Старый 25.10.2010, 16:24   #8
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Эта функция написана на JavaScript.
Просмотри исходный код этой страницы: http://pushkin.niv.ru/pushkin/stihi/stih-400.htm
JavaScript знаешь ? Если нет - прийдется почитать.
Смысл в том что часть текста стихотворения зашифрована. А функция что я выше указал как раз и расшифровывает этот текст.
ssdm вне форума Ответить с цитированием
Старый 25.10.2010, 16:27   #9
ckopnio
 
Регистрация: 25.10.2010
Сообщений: 7
По умолчанию

Ок. Почитаю... Спасибо.
ckopnio вне форума Ответить с цитированием
Старый 31.10.2010, 23:08   #10
ckopnio
 
Регистрация: 25.10.2010
Сообщений: 7
По умолчанию

Итак:
PHP код:
function na($s,$n1){
$kod1=array(209,224,205,255,207,243,248,234,232,237,216,243,208,232,202);    
$kod2=array();  
$l=strlen($n1); // длинна названия файла
function unicode ($code){
    if (
$code 191 $code 256){
        
$code $code+848;
    }
    elseif (
$code == 185){$code 8470;}
    elseif (
$code == 184) {$code 1105;}
    elseif (
$code == 168){$code 1025;}
    else {return(
$code);}
    
    
    return (
$code);
    
}
for(
$i=0$i<$l$i++){$kod2[$i]=ord($n1{$i});}  // заполняю масив
for ($i=0$i<$l$i++){$kod2[$i]=unicode($kod2[$i]);}
echo 
"<pre>";
print_r ($kod2);
echo 
"</pre>";
$ss=""$i1=0$i2=0;
$l2=strlen($s); // длинна кода
for($i=0$i<$l2$i=$i+2){
    
  
$k hexdec(substr($s,$i,2)); 
  echo 
$k."<br />"
  
$k1 $kod1[$i1]; $i1++; if ($i1>=count($kod1)-1){$i1=0;} 
  
$k2 $kod2[$i2]; $i2++; if ($i2>=count($kod2)-1){$i2=0;} 
  
$k $k^$k1$k $k^$k2;
  echo 
"p".$k."<br />";
  if (
$k>=192){$k=848+$k;} 
  if (
$k==168) {$k=1025;}
  if (
$k==184) {$k=1105;}
  if (
$k==185) {$k=78;}
  if (
$k!=13) {$ss=$ss.'&#'.$k.';';}
  echo 
"n".$k."<br />";
}
return (
$ss);
}
$m=na("3AD845928151318165A82BE83514356280E2B0E3D7D70A57C8C","stih-443.htm");
echo 
$m
передаю скрипту код и название файла.
Должно выйти "19 ОКТЯБРЯ. Напечатано в "
А выходит "˜Lбc–эX£-‡h‘•Œ¯y)L>GI‘Оy—"

Уже всё перепробовал. Как исправить?

Последний раз редактировалось ckopnio; 01.11.2010 в 02:11.
ckopnio вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37