0

自 2 小时以来,我一直在寻找解决方案来阻止与客人的超链接,但没有运气。

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

我想隐藏/阻止来宾用户的所有超链接。我需要你的大力帮助..真的卡住了。

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

4

1 回答 1

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:// 格式”文本(使用您的话)转换为 HTML 锚标记。例如,如果您使用 Drupal 并提供了一个访客可以访问的网络表单,您应该将格式从“完整 HTML”更改为更有限的格式,否则您将允许匿名用户将 HTML 输入到您的数据库中。您可能根本不需要 PHP 代码解决方案。

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

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


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

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

或者

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

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

但是,当你有时间的时候,请研究我写的其余部分。我认为您将能够以这种方式为您的问题找到更令人满意的解决方案。祝你好运。

于 2013-07-07T21:08:54.270 回答