Права доступа и путь к файлу в php - PullRequest
0 голосов
/ 18 ноября 2009

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

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

Index.php перенаправляет страницу на search.php; код: 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 появляется здесь.

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

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

1 Ответ

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

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

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

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

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

Чтобы построить первую строку, вам нужно сделать что-то похожее, то есть закодировать все аргументы. Здесь может быть полезна функция http_build_query () , которая принимает массив с ключами и значениями, кодирует их все и добавляет необходимые символы = и &:

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

, что дает

query=find%26me&search=1
...