Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите поправить обрезание домена
Форумы портала PHP.SU » » Вопросы новичков » Помогите поправить обрезание домена

Страниц (1): [1]
 

1. kuzmit4 - 26 Мая, 2015 - 16:46:47 - перейти к сообщению
Есть скрипт который обрезает все лишнее из ссылки, и оставляет только домен.
PHP:
скопировать код в буфер обмена
  1. $url = "http://site.ru/category/test-page.html";
  2. if (preg_match ("/^(http[s]{0,1}:\/\/){0,1}(www.){0,1}([a-zA-Zа-яёА-ЯЁ0-9_-]+\.[a-zA-Zа-яёА-ЯЁ]{2,4})\/{0,1}.*$/u", $url, $h))
  3. $site = $h[3];

Т.е. вбиваем ссылку он выдает site.ru что в принципе и нужно, но на днях обнаружил косяк.
Если ссылка с доменом третьего уровня например "site.com.ru" - то скрипт возвращает "site.com"
Как сделать чтобы домены третьего уровня обрезались без косяков ?
2. LIME - 26 Мая, 2015 - 17:13:12 - перейти к сообщению
3. Мелкий - 26 Мая, 2015 - 17:17:51 - перейти к сообщению
Как-то сложно и грубо нарушает RFC. Обижает .travel, не говоря уж про new gTLD

Банально parse_url не подходит?
4. kuzmit4 - 26 Мая, 2015 - 22:54:48 - перейти к сообщению
Всем спасибо за помощь!
5. kuzmit4 - 27 Мая, 2015 - 16:29:19 - перейти к сообщению
Вылез косяк, parse_url не подошел т.к. если указать домен в чистом виде без http:// - то он выводит пустую строку.

В общем сделал все с нуля, получился следующий код.
Пока все работает нормально.
В чем может быть косяк такого кода ?
PHP:
скопировать код в буфер обмена
  1. //      $url = "http://test.ru"; // ок
  2. //      $url = "http://www.test.ru/cat/page.html"; // ок
  3. //      $url = "test.ru/cat/page.html"; // ок
  4. //      $url = "www.test.ru"; // ок
  5. //      $url = "http://тест.рф/cat/page.html"; // ок
  6. //      $url = "тест.рф/"; // ок
  7.  
  8.         // Обрезать домен (новое2)
  9.         $site_link = array("http://", "www.", "//"); // лишнее
  10.         $cute1 = str_replace($site_link, "", $url); // обрезаем лишнее в начале
  11.         $cute2 = explode("/", $cute1); // обрезаем домен после слэш
  12.         $site = $cute2[0];
  13.         echo $site;
6. IllusionMH - 27 Мая, 2015 - 16:42:34 - перейти к сообщению
kuzmit4, HTTPS уже не в почете? Ха-ха
А вообще что мешает руками добавить протокол в случае если его нет, а потом парсить?
7. dcc0 - 27 Мая, 2015 - 16:46:53 - перейти к сообщению
Цитата:
Помогите поправить обрезание домена

Таки и туда они добрались = )
8. kuzmit4 - 27 Мая, 2015 - 16:47:35 - перейти к сообщению
IllusionMH пишет:
kuzmit4, HTTPS уже не в почете? Ха-ха
А вообще что мешает руками добавить протокол в случае если его нет, а потом парсить?

https забыл, спасибо.
9. Sail - 27 Мая, 2015 - 17:06:16 - перейти к сообщению
kuzmit4, вот такой демонстрационный примерчик:
Спойлер (Отобразить)

 

Powered by ExBB FM 1.0 RC1