2013-04-16 2 views
0

Я использую Wamp с Apach 2.4.2 на Windows 7 64-битной системе. Во время моих тестов я попытался установить urlencode свою строку url.403 Запрещено, если параметры urlencode

Я получаю следующее 403 запрещенного сообщения об ошибке:

У вас нет разрешения на доступ к /chi-linux/membersareaDev.php?doProfile=true на этом сервере.

Ссылки без urlencoding не дают ошибки. Поскольку это dev dev, у меня есть доступ к http.conf (без изменений). Весь мой код находится в c: \ wamp \ www \ chi-linux Я не получаю проблему с разрешениями, если я не urlencode.

Вот мой код:

<?php $url1 = urlencode("membersareaDev.php?doStatus=true?statid=10"); 
$url2 = urlencode("membersareaDev.php?doProfile=true"); 
echo "url=$url1"; 
?> 
<li><a href="membersareaDev.php?doProfile=true">Profiles</a></li> 
<li><a href=<?php echo "$url2"; ?> >Profiles Encode</a></li> 
<li><a href= "membersareaDev.php?doStatus=true?amp;statid=10">Status</a></li> 
<li><a href= <?php echo $url1;?>>Status Encode</a></li> 

Любые идеи относительно того, что я не хватает?

+1

для одного, membersareaDev.php? DoStatus = true? Statid = 10 имеет две вопросительные знаки, а не амперсанд. –

+0

Я пробовал различные варианты, чтобы обойти это, включая удаление второго параметра (membersareaDev.php% 3FdoStatus% 3Dtrue), и я все еще получаю ошибку –

ответ

0

UrlEncode() кодирует знак вопроса и поэтому ваш URL становится:

membersareaDev.php% 3FdoProfile% 3Dtrue

, который не является правильным, вам не нужно UrlEncode весь URL, только физическое лицо прошло параметры, если вы беспокоитесь о вводе пользователя.

+0

Вы всегда должны беспокоиться о вводе пользователя! Но наличие постоянных URL-адресов не представляет угрозы, и их можно просто закодировать так, как это необходимо, т. Е. Вообще не изменять, потому что они уже действительны. Обратите внимание, что вы должны htmlspecialchars() url, если вы создали его в переменной и поместили в HTML. – Sven

+0

ОК. Я не беспокоюсь о пользовательском вводе, потому что это переменные, которые я генерирую. Я думаю, что '=' переводится на% 3D. Вот один из примеров, когда я использую только одну переменную и не кодирую '=' membersareaDev.php% 3FdoStatus = true. Это все еще вызывает ошибку. –