PHP字符串中的撇号

时间:2014-04-29 16:41:11

标签: php

这太奇怪了!我有一个表单从数据库中获取信息,然后填写一个包含详细信息的表单。我正在努力满足一个人有像O' Neill这样的名字的情况。在页面的顶部(在实际表单本身之外)是一条将用户名称回显到屏幕的行:

<h2>Member Details for <?php echo $thefn; ?></h2>

这确实在页面上正确显示,即 Mike O&#39; Neill 的会员详情 但是,在实际的表单中,代码运行的地方:

<td><?php echo "<input type='text' name='fname' value='$thefn' size='30' maxlength='30'>"; ?></td>

撇号消失后,所有名称都会显示出来!变量是一样的,所以我做错了什么?这让我撕裂了我的头发(并且有相当多的!)

3 个答案:

答案 0 :(得分:3)

让我说我的名字是:

' /><script type="text/javascript">alert("You've just been hacked!");</script><input type="hidden" name="lol" value='hax

现在是什么?

htmlspecialchars($thefn)

应该有所帮助。

答案 1 :(得分:0)

在HTML中使用双引号" ",如下所示:

echo "<input type='text' name='fname' value=\"$thefn\" size='30' maxlength='30'>";

请注意,您必须使用\来转义它们,因为您已经使用双引号来分隔字符串(在PHP中)。另一种解决方案是在PHP端使用单引号(echo ' ';)并在字符串中使用双引号,这样您就不需要转义。

另请注意,此代码容易受到XSS attacks的影响,您可以使用htmlspecialchars()来阻止,这里是更正后的代码(XSS和引号):

echo '<input type="text" name="fname" value="'.htmlspecialchars($thefn).'" size="30" maxlength="30">';

答案 2 :(得分:0)

忽略明显的安全红鲱鱼(我假设你的$thefn变量的格式在HTML中的单引号之间是正确的),我会将PHP变量包装在{}括号内,就像这样。这有两个主要优点。一个 - 更容易发现可更换部件,另外,使PHP清楚地表明哪个部分是动态的。二 - 你可以使用更高级的变量,比如数组。 {$my_array['my_key']}

<td>
<?php
    echo "<input type='text' name='fname' value='{$thefn}' size='30' maxlength='30'>";
?>
</td>

另请参阅:PHP string parsing(在手册中)