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

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

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

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

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

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

Окей. Пока никто не родил ответа. Решение найдено!
Функция Javascript:
Код:
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);
}

Аналог на PHP:
PHP код:
function na($s,$n1){
$kod1=array(209,224,205,255,207,243,248,234,232,237,216,243,208,232,202);    
$kod2=array();  
function 
ordUTF8($c$index 0, &$bytes null)
{
  
$len strlen($c);
  
$bytes 0;

  if (
$index >= $len)
    return 
false;

  
$h ord($c{$index});

  if (
$h <= 0x7F) {
    
$bytes 1;
    return 
$h;
  }
  else if (
$h 0xC2)
    return 
false;
  else if (
$h <= 0xDF && $index $len 1) {
    
$bytes 2;
    return (
$h 0x1F) <<  | (ord($c{$index 1}) & 0x3F);
  }
  else if (
$h <= 0xEF && $index $len 2) {
    
$bytes 3;
    return (
$h 0x0F) << 12 | (ord($c{$index 1}) & 0x3F) << 6
                             
| (ord($c{$index 2}) & 0x3F);
  }          
  else if (
$h <= 0xF4 && $index $len 3) {
    
$bytes 4;
    return (
$h 0x0F) << 18 | (ord($c{$index 1}) & 0x3F) << 12
                             
| (ord($c{$index 2}) & 0x3F) << 6
                             
| (ord($c{$index 3}) & 0x3F);
  }
  else
    return 
false;
}

$l=strlen($n1); // длинна названия файла

for($i=0$i<$l$i++){$kod2[$i]=ordUTF8($n1{$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)){$i1=0;} 
  
$k2 $kod2[$i2]; $i2++; if ($i2>=count($kod2)){$i2=0;} 
  
$k $k^$k1^$k2//$k = $k^$k2;
  
echo "p".$k."<br />";
  if (
$k>=192){$k=$k+848;} 
  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);

$s - кодированая строкаж
$n1 - имя файла;

Функция возврщает юникоды символов.
Конечно стоит доделать её и возвращать сами символы, но в принципе я добился результата.
ckopnio вне форума Ответить с цитированием
Старый 01.11.2010, 17:05   #12
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Молодец.
Только вынеси функцию ordUTF8 из na )
ssdm вне форума Ответить с цитированием
Ответ


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



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