Права доступа и путь к файлу в php

Я использую index.php для управления доступом к страницам.

Вот механизм:

Index.php перенаправляет страницу на search.php; code: index.php/?page=search путь search.php: pages/search.php, search.php включает header.html, body.html и т. д.

Теперь в body.html мы вызываем search.php, используя: index.php/?page=search параметр, а body.html включает в себя этот код: index.php/?page=search?query='.quote_replace(addmarks($query)). Вы можете видеть два '?'. И это только эта проблема.

Когда я просматриваю search.php, он отображается в URL-адресе: example.com/?page=search.

Когда я нажимаю кнопку в search.php, а на самом деле в body.html, она отображается в URL-адресе example.com/index.php/?query=&search=1.

Таким образом, при просмотре отображается только страница index.php. Но я хочу отобразить результат поиска в search.php, и он должен отображать example.com/?page=search/?query=&search=1. Но вы можете видеть, что /?page=search исчезает, а /index.php появляется здесь.

Извините, состояние сложное, и я не очень хорошо его описываю. Если вы не могли понять это очень хорошо, я объясню.

Итак, есть ли у вас какие-либо советы по этому поводу? Большое спасибо.


person SUN Jiangong    schedule 18.11.2009    source источник


Ответы (1)


Если вы хотите использовать строку (например, search/?query=&search=1) в качестве аргумента URL, вам нужно закодировать ее так, чтобы она больше не содержала специальных символов, таких как ? и &. Для этого используйте php-функцию urlencode():

urlencode("search/?query=findme&search=1")

Это даст следующую строку, которую можно безопасно включить в качестве аргумента URL:

search%2F%3Fquery%3Dfindme%26search%3D1

Чтобы построить первую строку, вам нужно что-то подобное, то есть закодировать все аргументы. Здесь может быть полезна функция http://www.php.net/manual/en/function.http-build-query.php, который берет массив с ключами и значениями, кодирует их все и добавляет символы = и &, где это необходимо:

http_build_query(array("query" => "find&me", "search" => "1"))

который дает

query=find%26me&search=1
person Wim    schedule 18.11.2009
comment
@ Вим, твой совет так хорош. Нужно ли использовать urlencode и http_build_query вместе? Извините, я никогда не использовал его раньше. И вообще понятия не имею сейчас. - person SUN Jiangong; 18.11.2009
comment
Вы также можете использовать urlencode для второго случая и создать строку запроса самостоятельно, но http_build_query намного проще. И в любом случае вам нужно будет сделать два набора кодирования для одних и тех же данных, потому что они также будут декодированы дважды (один раз, когда значение для page будет прочитано , и еще раз при чтении query и search). - person Wim; 18.11.2009