我无法让我的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 "";
};
?>
感谢您提前提供任何帮助。
答案 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数据中去除斜杠,这样就可以获得提交的数据。