Как я могу parse_url в PHP, когда в строковой переменной есть URL? - PullRequest
3 голосов
/ 23 апреля 2010

По общему признанию, я новичок в PHP, поэтому мне нужна помощь.

Я создаю собственную партнерскую программу для своего сайта, и у меня есть возможность добавить дополнительный идентификатор в свою ссылку для отслеживания. Не имея контроля над тем, что вводится, я тестировал разные сценарии и обнаружил ошибку при вводе полного URL (т. Е. "http://example.com").

В моем PHP я могу получить переменную из строки без проблем. Моя проблема возникает, когда я получаю ссылающийся URL-адрес и анализирую его (поскольку мне нужно проанализировать ссылающийся URL-адрес, чтобы получить гриву хоста для других целей). Код ниже:

$refURL = getenv("HTTP_REFERER");

$parseRefURL = parse_url($refURL);

РАБОТАЕТ, когда входящая ссылка (например):

http://example.com/?ref=REFERRER'S-ID&sid=www.test.com

ОШИБКА при входящей ссылке (обратите внимание на добавление "http://" после" sid = "):

http://example.com/?ref=REFERRER'S-ID&sid=http://www.test.com

Вот предупреждающее сообщение:

Предупреждение: parse_url (/? Ref = REFERRER'S-ID & sid = http://www.test.com) [function.parse-url]: невозможно проанализировать URL в /home4/'directory'/public_html/hosterdoodle/header.php на линии 28`

Есть какие-нибудь идеи о том, как предотвратить сброс функции parse-url, если кто-то решит поместить URL-адрес в переменную? (Я на самом деле проверил эту проблему до такой степени, что она выдаст ошибку, указав в переменной всего лишь «: /»)

Ответы [ 2 ]

4 голосов
/ 23 апреля 2010

Следующая часть кода:

$url = "http://example.com/?ref=REFERRER'S-ID&sid=http://www.test.com";
$data = parse_url($url);
var_dump($data);

отлично работает для меня (PHP 5.3.2) и выдает следующий вывод:

array
  'scheme' => string 'http' (length=4)
  'host' => string 'example.com' (length=11)
  'path' => string '/' (length=1)
  'query' => string 'ref=REFERRER'S-ID&sid=http://www.test.com' (length=41)


Вы уверены, что передаете полный URL-адрес parse_url?

Если я использую эту часть кода:

$url = "/?ref=REFERRER'S-ID&sid=http://www.test.com";
$data = parse_url($url);

Я получаю то же предупреждение, что и вы:

Warning: parse_url(/?ref=REFERRER'S-ID&sid=http://www.test.com) 
[function.parse-url]: Unable to parse URL

Но это когда не передается полный URL ...

0 голосов
/ 23 апреля 2010

Почему бы не продезинфицировать $refURL с помощью str_replace , чтобы убрать http: //?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...