为什么在php中使用escape来获取选项值?

时间:2014-03-26 03:52:47

标签: php escaping

我在我的PHP代码中遇到过这个问题。这一切都有效,但我不明白为什么需要使用逃生。这会生成所有月份的下拉菜单。

foreach ($months as $key => $value) {
    echo "<option value \"$key\">$value</option>\n";

但是这样做:

foreach ($months as $key => $value) {
    echo "<option value $key>$value</option>\n";

所以我很困惑为什么要使用逃生?对不起,这可能是非常明显但我是php的新手?

1 个答案:

答案 0 :(得分:2)

你的第二个例子不起作用;它产生一个解析错误。

引号被转义以向PHP指示您希望逐字地返回引号,而不是使用引号来指示字符串的开头或结尾。在你的第一个例子中,这是有效的。在第二个示例中,会产生错误,因为您在.变量之前和之后都缺少一个运算符(如$key表示连接)。

更新:您已更新了问题,因此我会相应更新我的答案。

现在的区别在于,在您的第一个示例中,引号将打印在$key左右,而在第二个示例中,引号不会打印在$key周围。

如果$key包含没有空格的值,那么浏览器没有功能差异,它们都会以相同的方式创建下拉列表。但是,如果$key包含空格,则无法正常工作,因为$key中空格之前的字符将作为所选选项的值发送。

想象一下以下HTML:

<option value="some value">Display</option>

现在没有引号:

<option value=some value>Display</option>

或者包含更多属性:

<option value=some value selected>Display</option>

所以你可以看到这不起作用。