echo "<input type=\"text\" size=3 name=\"{$item[\"name\"]}\"/>";
但是以下工作正常
echo "<input type=\"text\" size=3 name=\"{$item['name']}\"/>";
根据我的理解,“真的逃脱了”
答案 0 :(得分:6)
您无需转义{}
内的引号。这应该被引用,因为它意味着PHP数组"name"
的字符串索引$name
。没有引号(或转义引号),name
被视为常量(我假设它不是),然后你有一对不属于引号的引号。
echo "<input type=\"text\" size=\"3\" name=\"$item[name]\"/>";
(name
周围没有引号,也没有{}
请参阅http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing
重新:评论
任何没有引号或$符号的非关键字都被视为常量(因为您可以使用define函数定义),因此"name"
(带引号)是一个字符串,{{没有引号的1}}是一个常数。
当这样写的时候,但是:
name
PHP首先会查找名为echo "{$item[name]}";
的常量,如果它不存在,它将使用字符串name
。但是,它(根据您的设置?)也会发出警告。
答案 1 :(得分:2)
$item["name"]
是变量的完整名称,因此在使用某些打印函数时无法构建变量名称。
在这种情况下,最好连接字符串,而不是以隐式方式插入变量。 e.g。
echo "<input type=\"text\" size=3 name=\"" . $item["name"] . "\"/>";
或类似
printf("<input type=\"text\" size=3 name=\"%s\"/>", $item["name"]);
//Parameters info at http://www.php.net/manual/es/function.sprintf.php
答案 2 :(得分:2)
为什么还要使用"
?它打开PHP特殊字符解析,占用更多的处理器时间。最好使用'
。
通过这种方式,您不必转义所有HTML引号,因此脚本将更好,更短,并且更少的处理器将用于简单的文本处理,您只需将文本与变量连接。
echo '<input type="text" size=3 name="'.$item['name'].'"/>"';
答案 3 :(得分:1)
这是因为解释器而你必须处理的边缘情况之一。没什么特别的。
在$item[\"name\"]
中,反斜杠\
是非法的,不应该存在,因此您会收到语法错误。
答案 4 :(得分:-1)
想想逃离后想要的东西
echo "<input type=\"text\" size=3 name=\"{$item[\"name\"]}\"/>";
会变成
<input type="text" size=3 name="{$item["name"]}"/>";
你可以看到是错误的,因为name属性之后的引号将在第二个引号处终止而其余部分挂起