这可能是我在一个语句中使用单引号和双引号的问题。但我有这段代码:
echo '<form>
<input type="submit" value="$number" onClick="function();">
</form>'
这个问题是提交按钮说的是短语$number
而不是该变量的值。
所以我环顾四周找到了这个解决方案:
echo "<form>
<input type='submit' value='$number' onClick='function();'>
</form>
这正确输出$ number的值,但我习惯在echo语句周围使用单引号,并希望保持这种方式。为什么只将所有单引号转换为双引号,并将单引号转换成单引号来解决问题?是否对第一段代码进行了修改,这样我就可以在echo上保留单引号,并在属性上加双引号?
答案 0 :(得分:11)
在PHP中,双引号字符串会自动解析其中包含的任何变量,但单引号字符串则不会。因此:
$myVar = 21;
echo "myVar: $myVar"
输出文字:myVar: 21
鉴于:
$myVar = 21;
echo 'myVar: $myVar'
输出文字:myVar: $myVar
您的代码存在的一个问题是,在HTML中,元素属性的值必须用双引号括起来,而不是单引号。我知道有些浏览器会接受这种形式(甚至根本没有引号),但这不是正确的方法。
有各种方法可以正确地实现您的愿望。
方法一:转义双引号字符串:
$myVar = 21;
echo "<div id=\"$myVar\"></div>";
虽然这可能是一个相当不优雅的解决方案,但它会起作用。
方法二:将字符串连接与单引号或双引号字符串结合使用:
$myVar = 21;
echo '<div id="' . $myVar . '"></div>';
这为IMO提供了更好的解决方案,因为如果您愿意,可以在其中使用函数调用或任何其他PHP代码。
警告:强>
请注意,当您不确定$myVar
的内容时(即用户输入),将其直接放入HTML代码是跨站点脚本(XSS)形式的安全漏洞)。想象一下,用户输入的内容如下:
lol"><script>alert('XSS!');</script></div><div id="lol2
这将导致生成的HTML代码包含以下内容:
<div id="lol"><script>alert('XSS!');</script></div><div id="lol2"></div>
这只是一个良性示例,但攻击者可以轻松使用相同的技术窃取用户的cookie(假装以该用户身份登录)。这里的消息是,当您不是100%确定变量的内容时,请不要直接将其插入HTML代码中。相反,请致电htmlspecialchars($myVar)
。这将转化为以下内容:
$myVar = $_POST['whatever'];
echo '<div id="' . htmlspecialchars($myVar) . '"></div>';
答案 1 :(得分:2)
在PHP中,处理和评估双引号内的变量,而在单引号中,所有内容都被视为字符串的一部分。
这里有一个更好的解释: http://www.trans4mind.com/personal_development/phpTutorial/quotes.htm
来自上述链接的双引号示例:
$something="Oh something";
echo "My answer is $something.<br>";
//result is: My answer is Oh something
以上链接中的单引号示例:
echo 'My answer is $something.<br>';
//result is: My answer is $something.
答案 2 :(得分:1)
当您使用单引号时,除了单引号外,内部的所有内容都是字面上的。当使用双引号时,任何以美元符号($)开头的东西都被假定为PHP的变量。使用变量时,我通常喜欢用双引号启动回声。
答案 3 :(得分:1)
如果您想继续使用单引号,则需要使用追加运算符(句点)。
echo '<form>
<input type="submit" value="' . $number . '" onClick="function();">
</form>';
答案 4 :(得分:1)
你可以这样做,避免整首歌曲和舞蹈。我觉得它更容易阅读。
<form>
<input type="submit" value="<?php echo $number; ?>" onClick="myFunction()">
</form>
答案 5 :(得分:1)
这对我输出
echo '<link rel="apple-touch-icon-precomposed" sizes="57x57" href='. ${base_url_favicon} . '/apple-touch-icon-57x57.png />'."\n";
echo "<link rel='apple-touch-icon-precomposed' sizes='57x57' href='${base_url_favicon}/apple-touch-icon-57x57.png' />\n";
答案 6 :(得分:0)
PHP将单引号和双引号字符串区分为不同的东西。单引号字符串是文字,您希望它们按原样输出。对于任何PHP变量以及适当的替换,都要对双引号字符串进行解释(扫描)。
这只是该语言的一个特征(也是一个有用的特征)。我实际上建议您习惯在所有语言中使用双引号作为字符串。没有语言是不可接受的,并且在静态类型语言(C,C ++,Java,...)中,单引号表示字符,而双引号表示字符串。也就是说,String foo = 'my string';
在Java中会出错,就像C或C ++中的char * foo = 'my string';
一样。但是,char foo = 'a';
和String foo = "my string";
只有当你需要从PHP中剔除最后几纳秒的性能时,你才能通过将双引号字符串转换为单引号字符串。在其他语言中没关系。 Afaik,PHP是唯一一种使这个字符串特异于双引号和单引号的语言。
答案 7 :(得分:0)
PHP在双引号字符串上执行所谓的变量插值,这意味着将搜索字符串以查找它们可能包含的任何变量,其值将在字符串中替换。如果要保留单引号,则需要将字符串和变量连接在一起,如下所示:
echo '<form>
<input type="submit" value="' . $number . '" onClick="function();">
</form>';
或者,如果你想保留双引号,你可以转义你想要打印的双引号:
echo "<form>
<input type=\"submit\" value=\"$number\" onClick=\"function();\">
</form>"