Одиночные кавычки и добавочные косые черты в формах php (значение опции, выходящее в пробел?) - PullRequest
1 голос
/ 12 октября 2010

Я не могу получить свою функцию addlashes и значение опции html, чтобы хорошо играть вместе. Моей первоначальной проблемой была одиночная кавычка в опции, но, решив, что я, похоже, создал еще одну проблему, в результате которой $ titleunit_name появляется только с первым словом.

Вот что я хочу выпустить:

baroffice = O'Fallon & Highway K & N

titleunit_name = O'Fallon & Highway K & N

cleantitleunit_name = O \ 'Fallon & Highway K & N

Вот что я получаю:

baroffice = O'Fallon

titleunit_name = O'Fallon & Highway K & N

cleantitleunit_name = O \ 'Fallon & Highway K & N

Я не знаю, имеет ли это значение, но значения обычно приходят и отправляются обратно в ms sql.

<form method="post" action="formtest.php?" id="searchform" target="" autocomplete="off">


<div id="office">

<font style="font-size:12px; font-weight:bold;" color="#002EB8" face="Verdana">
Closing Office:</font>

<select name="baroffice" style="width:90px">
<?php
$titleunit_name= "O'Fallon & Highway K&N";
$cleantitleunit_name=addslashes("$titleunit_name");

echo "<option value=$cleantitleunit_name name= '$titleunit_name'>"; 
echo "$titleunit_name</option>";

?>
</select></div><br>
<br><Br>
<input type="submit" name="submit" value="submit" style="position:relative;z-index:3">
<br><Br>
</form>

<?php
$baroffice = str_replace("\'","'",($_POST['baroffice']));

if (isset($_POST['submit']))
{

echo "baroffice=$baroffice<br>";
echo "titleunit_name=$titleunit_name<br>";
echo "cleantitleunit_name=$cleantitleunit_name<br>";


}
else
{echo "";
};

?>

Заранее спасибо за любую помощь.

1 Ответ

5 голосов
/ 12 октября 2010

Прежде всего, вам не нужны двойные кавычки вокруг переменных.Просто $titleunit_name правильно, а не "$titleunit_name".

Во-вторых, никогда не используйте аддлэш.Если вы экранируете контент для входа в MySQL, используйте более надежную функцию mysql_real_escape_string.addslashes пропускает случаи и оставляет ваш сценарий таким же открытым для атаки, как если бы вы его вообще не использовали.

И, наконец, косые черты не входят в вывод HTML.Вам нужна функция htmlspecialchars, которая подготавливает строку для записи в документ HTML.

echo '<option value="' . htmlspecialchars($titleunit_name) . '" name="' . htmlspecialchars($titleunit_name) . '">' . htmlspecialchars($titleunit_name) . '</option>';

Обратите внимание, что все использует $titleunit_name (или любая другая переменная) необходимо экранировать таким образом, прежде чем записывать их на страницу.

Теперь я догадываюсь из контекста, в котором у вас есть "магические кавычки", поэтому PHP автоматически выполняет addslashes для входящих данных POST.Если это так, отключите магические кавычки, и когда придет время вставить строку в базу данных, выполните соответствующее экранирование.Если это невозможно, используйте stripslashes, чтобы убрать косые черты из всех POST-данных в начале выполнения скрипта, чтобы получить данные как отправленные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...