回显href外部链接丢弃http://,无法将其添加回来

时间:2014-08-02 06:43:03

标签: php html security hyperlink echo

我正在尝试回显链接和说明,点击后会打开该链接。该链接位于我的数据库中,已包含http://这是我发现的内容。

href="'.trim($row['link']).'"

给我

http://localhost/venue/www.interplay.xyz

请注意,http://已从$行中删除。删除trim()给了我相同的结果。我在插入数据库的php页面中评论了这个。

$link = htmlentities($link)

但这让我很容易注入代码。

另外,我试过这个,没有评论出这些问题。

href="http://'.trim($row['link']).'"

它给了我

about:blank

不知道这是否有帮助。我们,这是我的整个PHP选择和回显链接。请找到问题,或者给我一个替代htmlentities来保护这个表格。谢谢。

<?php
//selected latest uploaded shout link
$sqlShout    = "SELECT *
              FROM shout
              WHERE id = ( SELECT MAX(id) FROM shout ) ;";

//display latest uploaded shout link
if ($resultShout = mysqli_query($con, $sqlShout))
{
          while($row = mysqli_fetch_assoc($resultShout)) 
          {
$_SESSION['shoutid'] = $row['id'];
    echo '<a target="_blank" href="http://'.trim($row['link']).'"><center>
    <font size="6">'.trim($row['title']).'</font><br>
    <font size="2">'.trim($row['link']).'</font>
    </a></center> ';
}
}
?>

1 个答案:

答案 0 :(得分:0)

是。 @LinkinTED是正确的。问题可能与$row['link']的值有关。

请检查$row['link']的值。我用变量$ row1替换$ row [&#39; link&#39;]。

我得到了预期的答案。

<?php
  $row1='http://www.google.com';
  $answer=trim($row1);
  echo $answer ."</br>"; // ...........1

  echo "http://".trim($row1)."";//..........2 
 ?>

答案如下:

http://www.google.com

http://http://www.google.com

trim()函数返回一个字符串,其中从str的开头和结尾剥去了空格。如果没有第二个参数,trim()将删除这些字符:

" " (ASCII 32 (0x20)), an ordinary space.
 "\t" (ASCII 9 (0x09)), a tab.
 "\n" (ASCII 10 (0x0A)), a new line (line feed).
 "\r" (ASCII 13 (0x0D)), a carriage return.
 "\0" (ASCII 0 (0x00)), the NUL-byte.
 "\x0B" (ASCII 11 (0x0B)), a vertical tab.