Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在php中使用escape作为选项值?_Php_Escaping - Fatal编程技术网

为什么在php中使用escape作为选项值?

为什么在php中使用escape作为选项值?,php,escaping,Php,Escaping,我在php代码中遇到过这种情况。这一切都是可行的,但我不明白为什么需要使用逃生装置。这将生成所有月份的下拉菜单 foreach ($months as $key => $value) { echo "<option value \"$key\">$value</option>\n"; foreach($key=>$value的月份){ 回显“$value\n”; 但这也是如此: foreach ($months as $key => $value)

我在php代码中遇到过这种情况。这一切都是可行的,但我不明白为什么需要使用逃生装置。这将生成所有月份的下拉菜单

foreach ($months as $key => $value) {
    echo "<option value \"$key\">$value</option>\n";
foreach($key=>$value的月份){
回显“$value\n”;
但这也是如此:

foreach ($months as $key => $value) {
    echo "<option value $key>$value</option>\n";
foreach($key=>$value的月份){
回显“$value\n”;

因此,我不明白为什么要使用转义?很抱歉,这可能非常明显,但我是php新手?

您的第二个示例不起作用;它会产生解析错误

引号将被转义,以向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>
显示

因此,您可以看到这不起作用。

我看不出这些代码片段之间有任何区别。“但这也不起作用。”---它们都完全相同;我是否遗漏了一些明显的内容?转义是为了双引号,表示您希望字符串中包含双引号。对不起,迈克,您是对的。我的错误。很好,继续检测无差异。我现在已经更改了它。@flaunster由于双引号不存在,所以对我来说仍然没有意义没有出现在下拉菜单中?你是对的。我的错。但是当我拿出"/在任何一方它都会再次起作用。我理解/正在做什么以及为什么,我只是不知道为什么它会这样做,当我不能首先包含它们时,它会做同样的事情。@Danrex我已经更新了我的答案,以匹配您更新的问题。好吧,如果我正确地阅读了您的内容。尽管它在这个特定的示例中正确地工作,但我如果我有像“这是一个$key”这样的东西,那么第一个例子会起作用,第二个例子会像纸牌屋一样倒塌?换句话说,这只是一个很好的练习?@Danrex,sorta of..如果
$key==“这是一个key”
(或任何其他带有空格或字符的值,浏览器将其解析为字符串的结尾)并且您传递了
$key
,则它将失败。好的,明白了。谢谢!我正在学习php,无法理解将它们放在那里的原理。