Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Аналог регулярки parse_url (оригинал глючит)


Автор: masp 13.2.2010, 16:15
оригинальный  вариант parse_url тоже глючит и не может нормально определить домен,
разыскал на http://php.net/manual/en/function.parse-url.php
аналогичную замену, и выходит что она тоже глючит,
 [host] => ews.miheeff.ru
а с parse_url вообще ничего не определяет
Код

<?php
$urls = 'http://news.miheeff.ru/language/Russian/website.lng';
$urls  = explode("/n",$urls);
//print_r($urls);

foreach ($urls as $k=>$v) {
    $v = trim($v);
    $u = j_parseUrl($v);
    echo '<pre>';
    print_r($u);
    
}


function j_parseUrl($url) {
  $r  = "(?:([a-z0-9+-._]+)://)?";
  $r .= "(?:";
  $r .=   "(?:((?:[a-z0-9-._~!$&'()*+,;=:]|%[0-9a-f]{2})*)@)?";
  $r .=   "((?:[a-z0-9-._~!$&'()*+,;=]|%[0-9a-f]{2})*)";
  $r .=   "(?::(\d*))?";
  $r .=   "(/(?:[a-z0-9-._~!$&'()*+,;=:@/]|%[0-9a-f]{2})*)?";
  $r .=   "|";
  $r .=   "(/?";
  $r .=     "(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+";
  $r .=     "(?:[a-z0-9-._~!$&'()*+,;=:@\/]|%[0-9a-f]{2})*";
  $r .=    ")?";
  $r .= ")";
  $r .= "(?:\?((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9a-f]{2})*))?";
  $r .= "(?:#((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9a-f]{2})*))?";
  preg_match("`$r`i", $url, $match);
  $parts = array(
            "scheme"=>'',
            "userinfo"=>'',
            "authority"=>'',
            "host"=> '',
            "port"=>'',
            "path"=>'',
            "query"=>'',
            "fragment"=>'');
  switch (count ($match)) {
    case 9: $parts['fragment'] = $match[8];
    case 8: $parts['query'] = $match[7];
    case 7: $parts['path'] =  $match[6];
    case 6: $parts['path'] =  $match[5] . $parts['path'];
    case 5: $parts['port'] =  $match[4];
    case 4: $parts['host'] =  $match[3];
    case 3: $parts['userinfo'] =  $match[2];
    case 2: $parts['scheme'] =  $match[1];
  }
  $parts['authority'] = ($parts['userinfo']?$parts['userinfo']."@":"").
                         $parts['host'].
                        ($parts['port']?":".$parts['port']:"");
  return $parts;
}
?>

Автор: segrey 13.2.2010, 17:47
Код

$urls  = explode("/n",$urls);


тут ошибка

Автор: awdev 13.2.2010, 17:49
Да ошибки нет, вернет массив с длинной 1.

Вопрос в том, что в [host] => ews.miheeff.ru вас не устраивает?


Автор: sTa1kEr 14.2.2010, 12:56
masp, может быть вам нужно просто обновить PHP?
Код

var_dump(parse_url("http://news.miheeff.ru/language/Russian/website.lng"));
/*
array(3) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(15) "news.miheeff.ru"
  ["path"]=>
  string(29) "/language/Russian/website.lng"
}

*/


Добавлено через 1 минуту и 20 секунд
Проверенно на PHP 5.2.11 и 5.3.1

Автор: masp 14.2.2010, 14:02
Код

Y:\xampp\php>php.exe -v
PHP 5.2.4 (cli) (built: Aug 30 2007 07:06:31)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
    with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technol
ogies
    with Zend Optimizer v3.3.0, Copyright (c) 1998-2007, by Zend Technologies


мдя, 
проверил на серваке(там всегда свежая), (PHP Version 5.2.6-1+lenny4)
при замене
$u = j_parseUrl($v);
на
$u = parse_Url($v);
аналогично глючит,

что 6-ю ПХП качать ?

тут что то не чисто ....

Да, меня смущает [path] => ews.miheeff.ru/language/Russian/website.lng



ХЕХ, и тут не спешать http://www.apachefriends.org/ru/xampp-windows.html
руками инсталить чтоли .....


Автор: Ипатьев 14.2.2010, 14:15
ни в жизнь не поверю, что стандартная функция возвращает тот же самый ews, что и кривая самописная функция.

masp, вы ответы, вообще, читаете?
вам ошибку указали. 

Автор: masp 14.2.2010, 14:54
ДАс, Спасибо, пробую обновить PHP, но всё равно не верится что б это был баг старых версий!

Автор: Fortop 14.2.2010, 15:10
Цитата(masp @  14.2.2010,  13:02 Найти цитируемый пост)
проверил на серваке(там всегда свежая), (PHP Version 5.2.6-1+lenny4)
при замене
$u = j_parseUrl($v);
на
$u = parse_Url($v);
аналогично глючит,

Врать не надо.

Код

D:\Web\php.binaries\php-5.2.6-nts-Win32>php.exe -v
PHP 5.2.6 (cli) (built: May  2 2008 19:37:32)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

D:\Web\php.binaries\php-5.2.6-nts-Win32>php.exe -c -n l.php
string(5) "5.2.6"
array(3) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(15) "news.miheeff.ru"
  ["path"]=>
  string(29) "/language/Russian/website.lng"
}


Код

D:\Web\php.binaries\php-5.2.4-Win32>php.exe -v
PHP 5.2.4 (cli) (built: Aug 30 2007 07:06:31)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

D:\Web\php.binaries\php-5.2.4-Win32>php.exe -c -n l.php
string(5) "5.2.4"
array(3) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(15) "news.miheeff.ru"
  ["path"]=>
  string(29) "/language/Russian/website.lng"
}


Код

D:\Web\php.binaries\php-4.3.7-Win32>php.exe -v
PHP 4.3.7 (cgi-fcgi) (built: Jun  2 2004 15:49:31)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

D:\Web\php.binaries\php-4.3.7-Win32>php.exe -c -n l.php
Content-type: text/html
X-Powered-By: PHP/4.3.7

string(5) "4.3.7"
array(3) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(15) "news.miheeff.ru"
  ["path"]=>
  string(29) "/language/Russian/website.lng"
}


Добавлено через 40 секунд
И собственно сам l.php
Код

<?php
var_dump(PHP_VERSION);
var_dump(parse_url('http://news.miheeff.ru/language/Russian/website.lng'));

Автор: segrey 14.2.2010, 15:28
ужс какойто. отладка млять 3-х строчек кода уже вторые сутки, при том на ошибку сразу указали в первом посте. может лучше бросить программирование и заняться чем - нибудь полезным для государства?

Автор: sTa1kEr 14.2.2010, 20:29
masp, у вас в 3ей строке стоит не правильный слэш. Для спецсимволов используется обратный слэш, т.е. должно быть "\n";

segrey, Ипатьев, большинство ошибок бывает по невнимательности, и это нормальное явление. Но скажите, что мешает явно 
указать на опечатку, зачем устраивать из этого цирк?

Автор: IZ@TOP 15.2.2010, 15:47
Цитата(sTa1kEr @  14.2.2010,  21:29 Найти цитируемый пост)
segrey, Ипатьев, большинство ошибок бывает по невнимательности, и это нормальное явление. Но скажите, что мешает явно 
указать на опечатку, зачем устраивать из этого цирк?


Так оно веселее. Попинать невнимательных, может их поменьше станет? Хотя, это так же реально, как вежливые водители на дорогах XD

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)