【问题标题】:Does heredoc output variables which contains quotes?heredoc 是否输出包含引号的变量?
【发布时间】:2014-08-07 18:13:36
【问题描述】:

我正在使用这个:

$variable = "Name is \"Bob\"";
$message = <<<EOF
    <input type="text" value="$variable">
EOF;

结果是:

实际上,这是一个综合示例,我正在使用 db。但我试过了:这个综合示例有效(模拟问题,实际上它表明我正在做的事情不起作用)。

【问题讨论】:

  • 你看网页源码了吗?你会看到&lt;input type="text" value="Name is "Bob""&gt;,所以PHP代码做的完全正确,但是HTML坏了。
  • 所以答案是肯定的,heredoc 会保留变量中的引号。
  • @Michael Berkowski:反斜杠在 HTML 中没有特殊含义 - 引号始终编码为 &amp;quot;
  • @BoltClock 或使用十六进制代码&amp;#39;
  • @BoltClock 是的,我在上面输入了一些废话。

标签: php html variables double-quotes heredoc


【解决方案1】:

是的,引号将出现在 HTML 中。

由于引号将结束属性值,您将使 HTML 无效。

您需要使用htmlspecialchars() 使变量HTML 安全。

【讨论】:

    【解决方案2】:

    您正在生成无效的 HTML:

    <input type="text" value="Name is "Bob"">
    

    插入前请使用htmlspecialchars()$variable进行编码。

    【讨论】:

      【解决方案3】:

      heredoc 只是多行回显的便捷快捷方式。它不关心字符串中的内容,它只会被输出。

      以下两种结构没有区别:

      $foo = "A string with an \" embedded quote";
      
      echo <<<EOL
      Hello, $foo, how are you
      EOL;
      
      echo "Hello, $foo, how are you";
      

      唯一真正的区别是字符串的其余部分没有转义引号:

      echo <<<EOL
      This is a "quoted phrase" within a sentence
      EOL;
      
      echo "This is a \"quoted phrase\" within a sentence";
      

      【讨论】:

      • 嗯。所以最好在添加到数据库之前用引号对所有数据进行编码,对吗?例如&amp;quot;,对吗?我的意思是,在添加到数据库之前我必须使用htmlspecialchars(),对吧?
      • 见鬼! (抱歉我法语不好)。 htmlspecialchars 是 USELESS 用于数据库目的。您需要阅读以下内容:stackoverflow.com/questions/60174/…
      • 嗯。我已经在使用 pdo。我在向基础添加数据时没有问题。正如我现在意识到的那样,数据存储在带有引号的数据库中。喜欢Some "name" data,而不是Some &amp;quot;name&amp;quot; data。我必须以第二种格式存储数据,对吗? PDO,可能,因为我使用它不这样做,是吗? How I use pdo?Results of that in database.
      • 没有。 db 不在乎您如何对引号进行编码。它确实关心您如何首先将这些引号放入数据库中。
      猜你喜欢
      • 1970-01-01
      • 2012-09-22
      • 2018-09-02
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多