【问题标题】:PHP MYSQL allowing a user to submit a link from a textareaPHP MYSQL 允许用户从文本区域提交链接
【发布时间】:2013-12-16 18:46:57
【问题描述】:

我正在尝试为游戏创建粉丝网站,但遇到了问题。我有一个 html 文本区域,用户可以放入他们自己的简历,或者其他方面的关于我的简历。我想知道如果用户键入链接(例如 google.com)如何发布到我的数据库,然后显示为可点击的链接,当点击该链接时,该链接会将某人带到其中放置的任何链接。因此,如果有人键入 google.com,点击时会转到 google.com。如果有人输入 facebook.com,点击后会转到 facebook.com,等等。

那么我怎样才能使它可以点击链接而不必放入一个href?这就是我目前所拥有的一切,因为我不知道从这里去哪里。

文本区号:

<tr>
    <td class="style7"><div align="right">Bio:</div></td>
    <td><textarea name="bio" cols="42" rows="8" id="bio"><?php echo "$bio"; ?></textarea></td>
</tr>

一些php:

 $bio = $_POST['bio'];

发布到数据库:

$sql = mysql_query("UPDATE members SET email='$email', password='$password', country='$country', bio='$bio' WHERE id='$id'"); 

任何帮助将不胜感激!

【问题讨论】:

标签: php html mysql hyperlink


【解决方案1】:

通过添加安全层来实现您想要的效果的一个好方法是使用 BBCode 标签。

BBCode on the PHP.net webistesimple BBCode parser available in a single file here 上有完整的文档。

这样可以很容易地将链接转换为可点击的文本:

$safe_html = bbcodeParser($bio);

然后将这个 $safe_html 添加到数据库中。

或者代替文本区域,输入仅接受 URL 的单行输入(如其他答案所示,使用正则表达式进行检查)。

不过,您发布的代码中还有许多其他安全漏洞需要考虑!小心!

【讨论】:

    【解决方案2】:

    你的问题有一套解决方案

    • 用户输入可以是 html 链接(不是一个好主意:注入)
    • 用户留下一个类似于 url 的裸字符串
    • 用户留下一个特殊格式的 url,就像 stackoverflow 一样 [url](metaData)

    让我们关注一些注意事项

    • 保存格式化的数据以备输出(坏主意)
    • 像用户传递数据一样保存数据(过滤后)并准备输出函数来处理内容

    一些工具供您使用

    • RegularExpressionsRegularExpressions,以及更多RegularExpressions

    请花点时间了解你的问题的根本原因,然后回来问你的内心满足

    【讨论】:

      【解决方案3】:

      我会研究 preg_replace 以自动检测链接。

      Regular expressions 是一个非常有用的东西,它们可以用来做很多事情。例如,大多数 Markdown 解析器至少会使用一些正则表达式。

      您会想要匹配以“.tld”结尾的任何内容(最好使用 TLD 列表而不是仅仅使用“*.*”),并且您可能想要这样做它在渲染时进行,而不是在最初插入时,但您可以自己决定何时进行过滤。

      您可以通过要求添加 http:// 或 https://(或您希望允许用户链接到的任何其他协议)来进一步简化上述内容

      由于您可能是正则表达式的新手,here 是一个非常有用的网站,提供一些帮助,here 是一个实时测试网站。

      值得注意的是,regexpal 和 PHP 正则表达式的语法略有不同,功能也非常非常略有不同,因为前者使用的是 Javascript。

      我想提出的还有您完全未经处理的 SQL 查询 - 我敦促您至少研究一下环境卫生,我强烈建议您使用 PDO。这可能有点复杂,但就目前而言,很有可能有人会弄乱您的数据库。

      狩猎愉快!

      【讨论】:

      • .tld 的问题在于所有新的扩展名都将开始看起来像 .clothing 或 .plumbing(哈哈,这将是多么混乱)
      • 是的,这是真的,但目前它可以正常工作。需要 http:// 和 https:// ,但你有什么会更好。
      猜你喜欢
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多