发布包含撇号的php变量

时间:2012-10-28 16:58:13

标签: php post escaping apostrophe

我无法将php变量发布到另一个页面。该变量是从用户选择的下拉列表中检索的,如果它包含撇号,我只会在撇号发布前得到该部分。 I.E.如果我想发布“Cooper's Hawk”,我只会收到“Cooper”。如何正确地逃避这一点,以便我可以发布整个字符串?

这就是我所拥有的:

 echo '<form method="POST" action="advanced_search2.php">';
 $dropdown_english_name = "<select class = 'dropdown' name='english_name'>     <option>ALL</option>";


$query = "SELECT DISTINCT english_name FROM moth_sightings WHERE user_id ='$username'ORDER BY english_name asc";
                $result = mysql_query($query) or die(mysql_error());
                echo "<tr><td>English Name:</td>";
                while($row = mysql_fetch_assoc($result)) 
                    {
                       $dropdown_english_name .= "\r\n<option class = 'dropdown_active' value='{$row['english_name']}'>{$row['english_name']}</option>";
                    }
                $dropdown_english_name .= '\r\n</select>';
                echo '<td>' .  $dropdown_english_name .'</td></tr>';

在不同的页面上

$posted_value = ($_POST['english_name']);
 echo $posted_value;die;

因此,从上面的代码中可以看出,发布的字符串是“库珀鹰”,但回显的输出是“库珀”。 提前感谢任何提示。

2 个答案:

答案 0 :(得分:3)

你可能通过生成

来打破你的形象
 <select ...><option value='cooper's hawk'>...</option></select>
                                  ^---

使用该结构,您获得的提交值为cooper,选项标记最终会显示两个未知属性shawk。在构建这样的html表单时要小心。您以确保数据中的嵌入式引号不会从根本上改变html的结构,例如使用混合引号或编码引号:

values="cooper's hawk"
values="cooper&#39;s hawk"

都会奏效。请注意不同的引用样式。

答案 1 :(得分:1)

您可以使用php函数addslashes($variable)