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

bnw*_*bnw 1 html php forms

我无法让我的addslashes函数和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 "";
};

?>
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

Vot*_*ple 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>';
Run Code Online (Sandbox Code Playgroud)

请注意,在将它们写入页面之前,必须以这种方式转义(或任何其他变量)的所有用法.$titleunit_name

现在,我猜测你从上下文中得到了"魔术引号",因此PHP会自动执行addslasheson on POST数据.如果是这样,请关闭魔术引号,当需要将字符串插入数据库时​​,执行相应的转义.如果无法做到这一点,则使用stripslashes在脚本执行开始时从所有POSTed数据中去除斜杠,以便获得提交的数据.