【问题标题】:Why aren't my htmlspecialchars and str_replace not working?为什么我的 htmlspecialchars 和 str_replace 不起作用?
【发布时间】:2013-02-08 12:59:13
【问题描述】:

我的例子请访问http://jflaugher.mystudentsite.net/cmweb241/cmweb241_lab2.html

我只需要 htmlspecialchars 和 str_replace 函数来删除双引号和单引号。为什么这对我不起作用?我对 PHP 很陌生:/

 <?php
  $username = str_replace(array("'", "\""), "", htmlspecialchars($_POST['username']));
  $password = str_replace(array("'", "\""), "", htmlspecialchars($_POST['password']));
  $comment = str_replace(array("'", "\""), "", htmlspecialchars($_POST['comment']));

  echo " <p>Your Username is: $username . </p>";
  echo " <p>Your Password is: $password . </p>";
  echo " <p>Your Comment was: $comment . </p>";

?>

【问题讨论】:

  • htmlspecialchars - 将单引号和双引号转换为 htmlentities,因此,您不会有任何匹配项。
  • 按其他顺序进行。先去掉引号,再做 htmlspecialchars。

标签: php


【解决方案1】:

按照 Alex Luunix

指定的相反顺序使用它
$username = htmlspecialchars(str_replace(array("'", "\""), "", $_POST['username']));

【讨论】:

  • +1 在回答中看到我的名字。 (而且它是正确的。)
  • @AlexLunix 作为建议,如果您知道答案,请将其发布为答案,不要发表评论。 :)
  • 我觉得答案太短而且很懒惰:p 也许下一次,我和任何人一样喜欢代表。
  • @JeremyFlaugher 符号将显示,但如果您查看源代码,它应该显示为 &尝试一些 html 标记,以查看它们不会被浏览器解释为 html。例如,假设您正在尝试注入一个 img 标签并看到它失败了。
  • @JeremyFlaugher 这不是我的答案,所以我不会得到代表,但它是正确的,所以你应该选择它。要得到你想要的,你需要做 htmlspecialchars twice
【解决方案2】:

前面的答案是正确的。

您应用第一个 htmlspecialchars 函数。它将每个双引号转换为 "以及 ' 的每一个单引号。这些特殊字符在网络浏览器中分别显示为双引号和单引号。

您应该首先应用 str_replace。下面的代码是正确的:

<?php
foreach(array('comment', 'password', 'username') as $key) {
    $$key = empty($_POST[$key]) ? null : htmlspecialchars(str_replace(array("'", '"'), '', $_POST[$key]));
    echo " <p>Your " . $key. " is: " . $$key . "</p>";
}
?>

【讨论】:

  • 这对于 3 个值来说似乎是非常不必要的,当然它可能对更多值有意义,但没有更多……可读性优于优化。尽管您应该添加的一件事是验证该字段已设置。
猜你喜欢
  • 1970-01-01
  • 2013-03-28
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
相关资源
最近更新 更多