Zend рдлреНрд░реЗрдорд╡рд░реНрдХ 2 рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ URL

рдЙрджреНрджреЗрд╢реНрдп:
  1. рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ URL рдпреБрдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИред рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреВрд░реНрдг рдФрд░ рд╕рд╛рдкреЗрдХреНрд╖ URL рджреЛрдиреЛрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрди рджреЛрдиреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдФрд░ рд╕рд┐рдВрдХ рдореЗрдВ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ "http: //" рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реНрдг рд▓рд┐рдВрдХ рдХрд╛ "рдЧрд▓рдд" рдкреНрд░рд╛рд░реВрдк рд╣реИред рдЖрдЧреЗ "рдЧрд▓рдд" рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдкрд╛рда рдХреЗ рд╕рд╛рде рд╣рдо рдЕрдкреВрд░реНрдг рдкреВрд░реНрдг рд▓рд┐рдВрдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред
  3. "RF" рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░реЗрдВред


рдПрдХ рдЙрджрд╛рд╣рд░рдг:site.ru/page.php/page.phpsite.ru/page.php
рдпреЛрдЬрдирд╛http
рдореЗрдЬрд╝рдмрд╛рдиsite.rusite.ru
рдкрдеpage.phppage.phppage.php

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл 1 рдФрд░ 2 рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


Zend\Uri\Http рд╡рд░реНрдЧ рд╣рдореЗрдВ рдЗрд╕ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ parse($uri) getHost() parse($uri) , getHost() , getPath() , рдЖрджрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди! " site.ru/page.php " (" http:// " рдХреЗ рдмрд┐рдирд╛) рдЬреИрд╕реЗ URL рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп, getHost() рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛ рджреЗрдЧрд╛, рдФрд░ getPath() " site.ru/page.php " рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣рд╛рдБ рдореБрдЭреЗ рдЬреЛ рднреА рдЪрд╛рд╣рд┐рдП рдЙрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рддрд░реАрдХрд╛ рд╣реИ ред рдкреВрд░реНрдг рдЕрдкреВрд░реНрдг рд▓рд┐рдВрдХ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд▓рд┐рдВрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ (рд░рд┐рд╢реНрддреЗрджрд╛рд░ рд▓рд┐рдВрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░)ред рдЖрдк рдЗрд╕рдХреЗ TDL (рдкреНрд░рдердо-рд╕реНрддрд░реАрдп рдбреЛрдореЗрди) рдХреА рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рдПрдХ рдкреВрд░реНрдг рдЕрдкреВрд░реНрдг рд▓рд┐рдВрдХ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рдбреЛрдореЗрди рдореМрдЬреВрдж рд╣реИ, рддреЛ рд▓рд┐рдВрдХ рдХреЛ рдкреВрд░реНрдг рдЕрдкреВрд░реНрдг рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  public function myParse($url){ $Http = new Http($url); if($Http->isValidRelative()){ //  url    $path = $Http->getPath(); //  path   ┬л/┬╗ тАФ       ┬л┬╗    //    if( $path{0} !== '/' ){ //     ... $absoluteUrl = '//'.urldecode($Http->toString()); $absoluteHttp = new Http($absoluteUrl); // (1) $Hostname = new Hostname(array('allow'=>Hostname::ALLOW_DNS, 'useTldCheck'=>false)); $decode = true; // ...       (2) if ($Hostname->isValid($absoluteHttp->getHost($decode))) { //     ,    ┬л┬╗  $Http = $absoluteHttp; } } } return $Http; } 

рдХреЛрдб рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

  1. рд╣рдо Zend\Validator\Hostname рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ $validIdns рдореЗрдВ рд▓рд┐рдВрдХ рдХреЗ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рдбреЛрдореЗрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
  2. рд╣рдо getHost() рд╡рд┐рдзрд┐ рдореЗрдВ $decode = true; рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ $decode = true; рдореЗрдЬрдмрд╛рди рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред Zend\Uri\Http рд╡рд░реНрдЧ рдХреА getHost() рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд╣реАрдВ рдорд╛рдирддреА рд╣реИ рдпрд╛ рдХреБрдЫ рднреА рдбрд┐рдХреЛрдб рдирд╣реАрдВ рдХрд░рддреА рд╣реИ! рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? .. рдиреАрдЪреЗ рдкрдврд╝реЗрдВред

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рдЕрдиреБрдЪреНрдЫреЗрдж 3 рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рд░реВрд╕реА рд╕рдВрдШ рдХреЗ IDN рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, ZF2 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ IDN рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд░рдиреА рд╣реЛрдЧреАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЬрд┐рд╕ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдПрдиреНрдХреЛрдб рдФрд░ рдбрд┐рдХреЛрдб рдХрд░рдХреЗ url рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ Zend\Uri\Http рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред

 namespace Application\Other; use Zend\Uri\Http as ZendHttp; use Application\Model\IdnaConvert; class Http extends ZendHttp { public function setHost($host){ if($host){ $idn = new IdnaConvert(); $host = $idn->encode($host); } return parent::setHost($host); } public function getHost($decode=false) { if($decode && $this->host){ $idn = new IdnaConvert(); return $idn->decode($this->host); } return parent::getHost(); } } 

рддрджрдиреБрд╕рд╛рд░, рд╣рдорд╛рд░реЗ myParse() рд╡рд┐рдзрд┐ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд Http рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ URL рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп, RF рдбреЛрдореЗрди рдХреЛ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛; рдФрд░ рдЬрдм рдЖрдк getHost($decode) рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд┐рдзрд┐ рдХреЛ рджрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреБрдирд░реНрдирд╡реАрдиреАрдХрд░рдг рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпрд╛ рдПрдХ рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

PS рдЙрдкрд░реЛрдХреНрдд рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рд░рд╛рдп рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдЬреЛ ZF2 рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рд╣реИрдВред рдПрдХ рдФрд░ рдХрд╛рд░рдг - рдореБрдЭреЗ рдЗрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдп рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рд╢рд╛рдпрдж рдЖрдк рд╕реЗ рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦреВрдВрдЧрд╛, рд╢рд╛рдпрдж рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕рдХреНрд╖рдо рд╡рд┐рдХрд▓реНрдкред

Source: https://habr.com/ru/post/In198614/


All Articles