Почему parse_url возвращает пустую строку в этом случае?parse_url возвращает пустую строку для URL: 'www.example.com'
<?php
$url='www.example.com';
$var= parse_url($url,PHP_URL_HOST);
print_r($var);
Почему parse_url возвращает пустую строку в этом случае?parse_url возвращает пустую строку для URL: 'www.example.com'
<?php
$url='www.example.com';
$var= parse_url($url,PHP_URL_HOST);
print_r($var);
Строка интерпретируется как относительный URL:
// print_r(parse_url('www.vtechpcsupport.com'))
Array
(
[path] => www.vtechpcsupport.com
)
Да, но странно, что документация ['parse_url'] (http://php.net/parse_url#refsect1-function.parse-url-notes) гласит:« Эта функция не работает с относительными URL-адресами ». Похоже, что это не «серьезно искаженный URL»;) –
В нем также говорится: «Частичные URL-адреса также приняты, parse_url() пытается наилучшим образом проанализировать их». – Andy
@Juicy: Mmh. Может быть, он умнее, чем утверждает. Если я попробую 'www.vtechpcsupport.com? Foo = bar', он правильно идентифицирует' foo = bar' как строку запроса. –
Это связано с тем, что www.vtechpcsupport.com
не на самом деле URL поскольку оно отсутствует scheme
часть (HTTP
или так), попробуйте так:
$url = 'http://www.vtechpcsupport.com';
$var = parse_url($url,PHP_URL_HOST);
print($var);
Это URL, но не один с хостом. – Gumbo
@ Gumbo, на самом деле это не так;) [Общий синтаксис URL-адреса] (http://tools.ietf.org/html/rfc1738#section-2) –
@Gumbo: только потому, что браузеры по умолчанию для http для голых имен хостов не " t сделать его url - схема необходима для правильного URL. например что, если это было на самом деле «ftp.vtechpcsupport.com» и на нем не было веб-сервера? –
Это потому, что www.vtechpcsupport .com не является полным URL.
Вы указываете PHP_URL_HOST, чтобы функция пыталась извлечь только часть хоста URL-адреса, которая не существует, так как без указания протокола URL считается относительным - так что вы хотите быть хозяином имя интерпретируется как (относительный) путь.
Попробуйте использовать:
$url='http://www.vtechpcsupport.com';
и вы должны получить поведение, которое вы ожидаете.
Попробуйте добавить HTTP в передней части URL? – Alex