php表单中的单引号和addslashes(空格中的选项值转义?)

时间:2010-10-12 19:25:16

标签: php html forms

我无法让我的addslashes函数和html选项值一起玩得很好。我最初的问题是选项中的单引号,但通过解决,我似乎创建了另一个问题,其中$ titleunit_name仅通过第一个单词出现。

这就是我想要的结果:

baroffice = O'Fallon&公路K& N

titleunit_name = O'Fallon&公路K& N

cleantitleunit_name = O \'Fallon&公路K& N

这就是我得到的:

baroffice = O'Fallon的

titleunit_name = O'Fallon&公路K& N

cleantitleunit_name = O \'Fallon&公路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 个答案:

答案 0 :(得分:5)

首先,您不需要围绕变量使用双引号。只有$titleunit_name是正确的,而不是"$titleunit_name"

其次,永远不要使用addslashes。如果您要转移内容以进入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会自动对传入的POST数据执行addslashes。如果是这样,请关闭魔术引号,当需要将字符串插入数据库时​​,执行相应的转义。如果无法做到这一点,那么使用stripslashes在脚本执行开始时从所有POSTed数据中去除斜杠,这样就可以获得提交的数据。