我正在使用PHP,JavaScript和MySQL / SQLite开发书签应用程序。
我有一个文本输入字段用于输入书签URL,该URL使用AJAX检查服务器上的输入值,以查看该书签数据库中是否已存在该URL。
如果在数据库中保存了确切的值http://www.domain.com
, http://www.domain.com
将显示为重复。
如果它有一个尾部斜杠http://www.domain.com/
,它会被忽略而不会显示为副本!
如果我确保在将新记录保存到DB之前删除尾部斜杠,那么这很简单。
我想要做的是从每个网址字符串生成2个网址...
如果我有这个网址:
`http://www.domain.com/some-article/page/2
然后我希望能够将此部分http://www.domain.com
放入变量中,然后将此部分/some-article/page/2
放入另一个变量中。
通过这种方式,我可以为网站的许多页面添加书签,但也可以查看我是否已将该网站域的任何页面添加为书签。
所以我希望能够从任何类型的URL字符串中获取基本URL。其次,能够获得超过.com
部分的网址中的任何值。
我知道这是一些基本内容,但我现在无法想到这些域部分的名称,可以使用JavaScript和PHP来帮助它们。
答案 0 :(得分:4)
PHP有一个内置的parse_url() function,所以你可以这样做:
$domain = parse_url($url, PHP_URL_HOST); // Get the full domain eg. www.com
$path = parse_url($url, PHP_URL_PATH); // Get the URL
现在我建议你忽略模式(http://),这样就不能提交相同的链接两次 - 如http://然后是https://。通常,大多数网站通过普通和加密渠道提供相同的内容。
在JavaScript中:
var parser = document.createElement('a');
parser.href = url; // Your URL here
console.log(parser.hostname); // Your domain
console.log(parser.pathname); // Your path
答案 1 :(得分:3)
这就是你在JS中的表现:
var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";
parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
并使用parse_url代替PHP。