Я новичок в php, пытающийся найти способ использовать parse_str для анализа нескольких URL-адресов из базы данных (примечание: не из запроса, они уже хранятся в базе данных, не спрашивайте ... так_GET не будет работать)
Итак, я пытаюсь это сделать:
$parts = parse_url('http://www.jobrapido.se/?w=teknikinformat%C3%B6r&l=malm%C3%B6&r=auto');
parse_str($parts['query'], $query);
return $query['w'];
Обратите внимание, что здесь я просто предоставляю пример URL-адреса, в реальном приложении URL-адрес будет передан вв качестве параметра из базы данных.И если я делаю это, он работает нормально.Однако я не понимаю, как правильно использовать эту функцию и как избежать ошибок.Прежде всего, здесь я использовал «w» в качестве индекса для возврата, потому что я ясно видел, что это было в запросе.Но как эти вещи работают?Есть ли набор конкретных значений, которые я могу использовать, чтобы получить всю строку запроса?Я имею в виду, что если я посмотрю дальше, я также смогу увидеть здесь «l» и «r» ... Конечно, я мог бы также извлечь их и объединить результат, но будут ли эти имена значений произвольными или есть способ узнатькакие именно извлечь?Конечно, есть значение «q», которое я изначально думал, что будет единственным, которое мне понадобится, но, видимо, нет.Это даже не в URL-адресе примера, хотя я знаю, что во многих других.
Так как мне это сделать.Вот что я хочу:
- Извлечь все части строки запроса, которые дают мне читаемый вывод строки поиска URL-адреса строки (поэтому в приведенном выше тексте это будет "teknikinformatör Malmö auto". Примечание.что мне нужно было бы перевести кодировку url на шведские символы, любой простой способ сделать это в php?)
- Обрабатывать ошибки, чтобы, если по какой-то причине вышеприведенное не сработало, метод должен возвращать толькопустая строка, таким образом, не нарушая код.Потому что в этот момент, если бы я использовал вышеупомянутое с фактическим параметром, переданным $ url вместо примера url, я бы получил ошибки, потому что многие из URL не имеют параметра "w", некоторые могут быть пустыми полями вбаза данных, некоторые могут быть искажены и т. д. Так как я могу стабильно обрабатывать такие ошибки и просто возвращать значение, если синтаксический анализ работает, и возвращать пустую строку в противном случае?
РЕДАКТИРОВАТЬ:
Кажется, возникает очень странная проблема, которую я не вижу во время отладки.Я поместил этот тестовый код просто для того, чтобы посмотреть, что происходит:
function getQuery($url)
{
try
{
$parts = parse_url($url);
parse_str($parts['query'], $query);
if (isset($query['q'])) {
/*return $query['q'];*/
return '';
}
} catch (Exception $e) {
return '';
}
}
Теперь, очевидно, в реальном коде я бы хотел, чтобы было возвращено что-то вроде закомментированной части.Однако, загадочная вещь такова:
С этим кодом, насколько я вижу, каждый путь должен приводить к возвращению пустой строки.Но это не работает - это дает мне полностью пустую сетку на странице результатов.Никаких ошибок или чего-либо еще во время отладки, и объекты выглядят хорошо, когда я перебираю их во время отладки.
Однако, если я удаляю все из этого метода, кроме return '';тогда он работает нормально - конечно, поле в сетке, где должен находиться запрос, пусто, но все остальные поля имеют всю информацию, как и должны.Так что это был просто тест.Но как это возможно, что код, который должен иметь возможность возвращать только пустую строку, не работает, в то время как тот, который возвращает только пустую строку и больше ничего не работает?Я полностью сбит с толку ...