在echo语句中混合html和php变量
这可能是我在一个语句中使用单引号和双引号时遇到的问题。但我有一段代码:在echo语句中混合html和php变量,php,html,Php,Html,这可能是我在一个语句中使用单引号和双引号时遇到的问题。但我有一段代码: echo '<form> <input type="submit" value="$number" onClick="function();"> </form>' 这将正确地输出$number的值,但我习惯在echo语句周围使用单引号,并希望保持这种方式。为什么把所有单引号都换成双引号,把双引号换成单引号就能解决问题?是否对第一段代码进行了修改,允许我在echo上
echo '<form>
<input type="submit" value="$number" onClick="function();">
</form>'
这将正确地输出$number的值,但我习惯在echo语句周围使用单引号,并希望保持这种方式。为什么把所有单引号都换成双引号,把双引号换成单引号就能解决问题?是否对第一段代码进行了修改,允许我在echo上保留单引号,在属性上保留双引号?在PHP中,双引号内的变量被处理和计算,而在单引号中,所有内容都被视为字符串的一部分 这里有一个更好的解释: 以上链接中的双引号示例:
$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.
$something=“噢something”;
echo“我的答案是$something.
”;
//结果是:我的答案是什么
上述链接中的单报价示例:
$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.
echo“我的答案是$something.
”;
//结果是:我的答案是$某物。
使用单引号时,除单引号外,所有内容都是按字面意思理解的。使用双引号时,PHP假定以美元符号($)开头的任何内容都是变量。使用变量时,我通常喜欢以双引号开始echo。如果要继续使用单引号,则需要使用append运算符(句点)
echo'
';
PHP将单引号字符串和双引号字符串区分为不同的东西。单引号字符串是文本,您希望它们按原样输出。将解释(扫描)任何PHP变量的双引号字符串,并进行适当的替换
这只是该语言的一个特性(也是一个有用的特性)。实际上,我建议您习惯在所有语言中对字符串使用双引号。没有语言是不可接受的,在静态类型语言(C,C++,java,…)中,单引号表示字符,而双引号表示字符串。也就是说,stringfoo='mystring'代码>会在Java中出错,就像char*foo='mystring'一样然而,charfoo='a'代码>是有效的,正如String foo=“我的字符串”代码>
只有当您需要从PHP中获得最后几纳秒的性能时,才可以将双引号字符串转换为单引号字符串。在其他语言中,这并不重要。顺便说一句,PHP是唯一一种能够区分特定于字符串的双引号和单引号的语言。PHP对双引号字符串执行所谓的变量插值,这意味着搜索字符串中可能包含的任何变量,这些变量的值在字符串中被替换。如果要保留单引号,则需要将字符串和变量连接在一起,如下所示:
echo '<form>
<input type="submit" value="' . $number . '" onClick="function();">
</form>';
echo'
';
或者,如果要保留双引号,可以转义要打印的双引号:
echo "<form>
<input type=\"submit\" value=\"$number\" onClick=\"function();\">
</form>"
echo”
"
在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>';
这将导致生成的HTML代码包含以下内容:
<div id="lol"><script>alert('XSS!');</script></div><div id="lol2"></div>
$myVar = $_POST['whatever'];
echo '<div id="' . htmlspecialchars($myVar) . '"></div>';
你可以这样做,避免整个歌舞。我认为它更容易阅读
<form>
<input type="submit" value="<?php echo $number; ?>" onClick="myFunction()">
</form>
这对我来说是一样的
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";
echo“”。“\n”;
回音“\n”;
作为旁注,如果用双引号括起来,最好将字符串其余部分的双引号转义,而不是对html属性使用单引号。使用此方法,如果我想将同一变量发送到function(),括号内的语法是什么?我可以不加引号地输入$number吗?onClick=“function(\'.$number.\');“
如果它是简单的文本/数字类型(并且不需要在客户端进行编辑),或者在函数调用var num=this.value
中输入。两者都可以,我倾向于后者。根据第二部分,如果它只是一个数字,那么就不需要内部引号:onClick=“function('.$number');“
如果我想将同一个变量发送到function(),在这两种情况下,括号内的语法是什么?我可以在没有引号的情况下输入$number吗?如果在第一个示例中输入了没有引号的$number,则将值$number
传递给函数;另一方面,如果在第二个示例中这样做,PHP将替换$number的值,这是您想要的。
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";