Php 为什么不';我的htmlspecialchars和str_替换不起作用吗?

Php 为什么不';我的htmlspecialchars和str_替换不起作用吗?,php,Php,以我为例,请访问 我只需要htmlspecialchars工作,str_replace函数删除双引号和单引号。为什么这对我不起作用?我对PHP非常陌生:/ <?php $username = str_replace(array("'", "\""), "", htmlspecialchars($_POST['username'])); $password = str_replace(array("'", "\""), "", htmlspecialchars($_POST['pa

以我为例,请访问

我只需要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>";

?>

按照Alex Lunix规定的相反顺序使用

$username = htmlspecialchars(str_replace(array("'", "\""), "", $_POST['username']));

前面的答案是正确的

应用第一个htmlspecialchars函数。它将每个双引号转换为“并将每个单引号转换为';。这些特殊字符在web浏览器中分别显示为双引号和单引号

您应该应用第一个str_替换。下面的代码是正确的:

<?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>";
}
?>

htmlspecialchars
-将单引号和双引号转换为htmlspecialchars,这样就不会有任何匹配项。按其他顺序执行。先删除引号,然后执行htmlspecialchars.+1,以便在答案中看到我的名字。(并且正确无误。)@AlexLunix作为一个建议,如果你知道答案,就把它作为答案发布,只是不要评论它。:)我觉得答案太短,而且很懒:p也许下次,我和其他人一样喜欢rep。@JeremyFlagger这些符号会显示出来,但是如果你查看源代码,它应该显示为&;尝试一些html标记,看看它们是否正确不要被浏览器解释为html。例如,假设您正在尝试注入一个img标记,并看到它失败。@JeremyFlagger这不是我的答案,所以我不会得到代表,但它是正确的,所以您应该选择它。要得到您想要的,您需要执行两次htmlspecialchars。这对于3个值来说似乎非常不必要,当然可能更多是有意义的,但没有更多的…优化的可读性。虽然你有一件事,他应该添加的是验证字段设置。