PHP:阻止访客的所有超链接

时间:2013-07-07 20:36:03

标签: hyperlink

我试图找到解决方案,因为2小时后阻止了客人的超链接,但没有运气。

文本内容从数据库加载并以HTML格式呈现。所有链接用户都可以添加简单的http://格式或锚标记,它会自动转换为链接。

我想隐藏/阻止来宾用户的所有超链接。我需要你的帮助..真的很困难。

我使用此数组$data['content']从数据库获取内容,这是html内容。

1 个答案:

答案 0 :(得分:0)

如果没有看到您的代码或了解有关上下文的更多信息,请参阅以下内容:将此代码放入名为demo.php的文件或类似的文件中并在命令行中运行:

<?php

$text_with_links[] = 'http://example.com';
$text_with_links[] = '<a href="http://example.com">Link</a>';

echo "User text:\n\n";
foreach ( $text_with_links as $text_example ) {
    echo "\t${text_example}\n";
}

echo "\n\n";

echo "Use text filtered by htmlspecialchars:\n\n";
foreach ( $text_with_links as $text_example ) {
    echo "\t" . htmlspecialchars( $text_example ) . "\n";
}

echo "\n\n";

echo "Use text filtered by strip_tags:\n\n";
foreach ( $text_with_links as $text_example ) {
    echo "\t" . strip_tags( $text_example ) . "\n";
}

你应该看到这样的事情:

$ php demo.php 
User text:

    http://example.com
    <a href="http://example.com">Link</a>


Use text filtered by htmlspecialchars:

    http://example.com
    &lt;a href=&quot;http://example.com&quot;&gt;Link&lt;/a&gt;


User text filtered by strip_tags:

    http://example.com
    Link

这演示了两个核心PHP函数htmlspecialchars和strip_tags的使用。在这里阅读这些文档:

请注意这些函数是如何更改用户条目“http://example.com”的。当你说“所有链接用户添加简单的http://格式......它会自动转换为链接。”时,我怀疑中间有一个进程正在发生。只需将字符串“http://example.com”打印到页面上通常不会将其呈现为HTML锚标记。

正如其他人所评论的那样,为了获得最佳帮助,您应该遵循stackoverflow.com指南并为您的问题提供所有相关详细信息和上下文,并打印您迄今为止尝试过的代码,以便其他人可以更正它并获得更好地了解你正在处理的事情。

请提及您正在使用的框架或CMS(因为我强烈怀疑您正在使用它)。 Drupal,Joomla,Wordpress等。

目前,您可以使用str_replace() - http://www.php.net/manual/en/function.str-replace.php从数据库中检索的所有字符串中删除“http://”。但这不是最好的解决方案。我认为正在发生的事情是您正在使用的软件是将“http:// format”文本(使用您的单词)转换为HTML锚标记。 例如,如果您使用Drupal并提供了访客可以访问的Web表单,则应将格式从“完全HTML”更改为更有限的格式,否则您将允许匿名用户将HTML输入数据库。 您可能根本不需要PHP代码解决方案。最好的方法是检查您为访客用户提供的WYSIWYG编辑器上的控件,并确保模板设置正确。

另外,你应该谷歌“防止XSS攻击PHP”,并“防止SQL注入PHP”。如果您希望拥有安全的网站,这是您必须进行的研究。

祝你好运。如果您提供更多详细信息,我和其他人可以为您提供更具体的帮助。


编辑:打印下面评论中写的内容,以便于阅读:

$content_tags_stripped = strip_tags( $data['content'] );

OR

$content_no_htmlspecialchars = htmlspecialchars( $data['content'] );

然后在代码中使用这些变量而不是$ data ['content']。

但是,如果你有时间,请学习我写的其余部分。我想你将能够以这种方式为你的问题找到一个更令人满意的解决方案。祝你好运。