【问题标题】:php - no need to escape variables when echoing? [duplicate]php - 回显时不需要转义变量? [复制]
【发布时间】:2018-11-16 06:43:11
【问题描述】:

所以当我意识到我没有逃脱我想要回应的变量时,我只是在偷懒,但奇怪的是它确实有效。

$item = ['name'=>'jeremiah', 'age'=>'22'];

echo "<ul>";
foreach($item as $key => $value) {
    echo "<li> $key - $value</li>";
}

echo "</ul>";

什么时候你应该做的是这个

$item = ['name'=>'jeremiah', 'age'=>'22'];

echo "<ul>";
foreach($item as $key => $value) {
    echo "<li>" . $key . " - " .  $value . "</li>";
}

echo "</ul>";

我真的做了很多php已经有几年了,但是什么时候改变了?

PHP 7.2.2 (cli)(构建时间:2018 年 1 月 31 日 19:31:15)(NTS MSVC15 (Visual C++ 2017) x64)

【问题讨论】:

  • 这通常被称为“字符串插值”顺便说一句。您可能可以搜索 PHP 文档。
  • "但是什么时候改变了?" ——据我所知:从来没有。 PHP 一直支持字符串插值。
  • 这里有什么问题?
  • 在双引号中可以按预期工作。在单引号中仍然无法按您的预期运行。你会得到文字变量。您也可能对 XSS 注入持开放态度,但我认为这不是这个问题的意义所在。这两个例子都没有逃避任何事情
  • 你将如何跨站点攻击除了用户输入之外没有硬代码变量的东西?我的意思是,如果我要接受用户输入,我会写一些更像这样的东西 $name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING);但是如果我在用户无法访问的地方硬编码变量,我不确定为什么我需要逃避任何东西......如果我错了请纠正我,总是愿意学习

标签: php


【解决方案1】:

有几点需要注意:

双引号将在字符串中打印变量:

$var = 'hello';
echo "$var world"; # this will print hello world

单引号不会在字符串中打印变量值:

$var = 'hello';
echo '$var world'; # this will print $var world

你所追求的(或认为你所追求的)是串联,它只是意味着加入,就像这样:

$varOne = 'hello';
$varTwo = 'world';

echo $varOne. ' ' .$varTwo. ' - some other string'; # will print hello world - some other string

最好的做法是单引号和连接,这是因为能够清楚地看到一个变量何时在一个字符串中使用,第三个选项比第一个更容易阅读。此外,单引号的执行速度也比双引号快(不是很多,只是加起来)。

【讨论】:

    【解决方案2】:

    据我所知,当我开始学习 PHP 时(5 年前),在双引号之间可以回显变量,但不能在单引号之间回显。

    【讨论】:

    • 您引用的网址与问题无关。
    • 我删除了它。有各种用 php 回显变量的示例(连接,双引号之间,大括号),即使它不是页面的主要主题......
    【解决方案3】:

    当您将变量放入double quotes 时,它将解析该值。一直都是这样。

    所以:

    echo "<li> $key - $value</li>";
    

    还有

    echo "<li>" . $key . " - " .  $value . "</li>";
    

    会给你同样的结果。

    【讨论】:

    • 好吧,我想我只是没有实践,或者很容易混淆,自从我成为一名真正的开发人员以来已经有 10 到 12 年了。
    猜你喜欢
    • 2020-06-05
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多