【发布时间】:2010-02-25 11:03:52
【问题描述】:
我需要做的是检查一个 url 是否已经使用 php 在数据库中提交。
我有一个数据库表,用于存储用户提交的 URL。但我想在将其插入数据库之前检查 url 是否已在数据库中提交。 例如, http://www.example.com、http://www.example.com/、http://example.com 和 http://example.com/ 等 URL 如果其中任何一个已插入数据库,则应返回 false,因为它们都是相同的 URL。 我认为我们可以通过使用正则表达式来完成这项工作。但是我在正则表达式方面有点弱,所以需要你的帮助。 谢谢
已编辑
您好,让我们假设 URL 是否在数组中而不是数据库中,只是为了弄清楚。我知道唯一键和与数据库结果匹配的 url。但是这里我有一个
如果你仔细看的话,会有不同的问题。
$urls = array('http://www.example.com/newpage.html', 'http://www.example.com/newpage.html');
案例 用户提交一个 url。假设http://example.com/newpage.html
现在作为 URL http://www.example.com/newpage.html 在 $urls 数组中可用,http://www.example.com/newpage.html 和 http://example.com/newpage.html(userinput 没有 www) 是相同的页面,所以我需要一个函数来检查它,如果 url 在数组中可用则返回 false。我希望我现在澄清了自己。
所以到目前为止我认为它没有检查域或在 mysql 表中为 url 字段创建唯一键。我认为我们需要为此使用 regExp。有什么帮助吗?
【问题讨论】:
-
www.example.com和example.com是不相同的网址。 -
但我想假设它们都是一样的,因为大部分时间都是一样的。
-
在检查之前尝试删除任何尾随的
/。这将使http://www.example.com/和http://www.example.com匹配。至于www部分,Ben 是对的。如果您确实确定假设www并且没有任何相同之处,请尝试在添加任何 URL 时将www.替换为空白。这样一来,您的数据库中的所有记录都将使用example.com而不是www.example.com,从而可以正确匹配。 -
在这种情况下,如果 url 是 examplewww.com
-
$url = preg_replace('/http(s?):\/\/www\./i','http${1}://',$url)然后。 :3