Как использовать urlencode в PHP - PullRequest
0 голосов
/ 18 ноября 2009

Я пытаюсь использовать urlencode для преобразования строки: <a href="<?php print 'search.php?query='.quote_replace(addmarks($search_results['did_you_mean'])).'&search=1'?>">

Собственно, я хочу реализовать поисковик.

|-www
 |- index.php
 |- search directory
  |- search.php
  |- header.html
  |- search_form.html
  |- search_result.html
  |- footer.html

search.php includes header.html,search_form.html,search_result.html etc.

Я обращаюсь к search.php, используя: localhost/index.php/?page=search

search_form.html включает кнопку для поиска. И он вызывает search.php, используя: <form action="index.php/?page=search" method="get">. Я не уверен, правильно ли это.

После отправки поискового запроса search.php вызывает search_result.html для отображения результата. Код в search_result.html: <a href="<?php print 'search.php?query='.quote_replace(addmarks($search_results['did_you_mean'])).'&search=1'?>"><?php print $search_results['did_you_mean_b']; ?>

Кажется, должно работать, но после того, как я нажму кнопку поиска, результат будет index.php/?query=&search=1. И я думаю, что это должно быть index.php/?page=search/?query=&search=1.

Итак, я пытаюсь использовать urlencode для ее решения. И я не знаю, верна ли идея.

Ответы [ 2 ]

10 голосов
/ 18 ноября 2009
$url = 'search.php?' . http_build_query(array(
    'query'  => $search_results['did_you_mean'],
    'search' => 1
));

Это самый простой способ - см. http_build_query().

Я не знаю, что делают ваши функции quote_replace() и addmarks(), но при запуске urlencode("search.php?query=") это также закодирует ? и = и приведет к search.php%3Fquery%3D (то же самое для urlencode("&search=1"), который кодирует & и = и приведет к %26search%3D1), что в итоге сделает URL непригодным для использования.

4 голосов
/ 18 ноября 2009

urlencode используется так:

$url = 'http://example.com/page?foo='.urlencode($foo).'&bar='.urlencode($bar);
...