首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中拆分IDN URL

在PHP中拆分IDN URL
EN

Stack Overflow用户
提问于 2012-06-01 00:33:51
回答 2查看 419关注 0票数 2

我尝试使用类似于http://exämple.se/pathhttps://äxämple.se/anotherpath?foo=bar&baf=bas的IDN URL,这样我就可以获得它的组件,如下所示:

代码语言:javascript
复制
[0] http(s)://
[1] äxämple.se
[2] /anotherpath?foo=bar&baf=bas

我的第一个想法是“我将直接使用parse_url!”好吧,除了它不支持IDN域名,所以没什么好运气的。

接下来,我尝试了一系列我自己的正则表达式技巧,但不知何故未能获得任何有用的输出(其中一些在一定程度上有效,但仍然非常缺乏)。

最后,我尝试了其他人的regex模式,但它们似乎都不适合我(work right =捕获任何有用的东西,一个捕获整个url作为其“协议”部分,我遇到的大多数其他人没有捕获任何内容,或者在功能上与我尝试过的完全相同)。

当然,我为什么要这么做呢?我想先在域名上运行idn_to_ascii,然后再将网址拼接起来并存储到数据库中。

那么,我到底做错了什么呢?我的方法是完全错误的,还是有一些神奇的preg_match调用可以解决我的问题?

编辑:最好是我想要一个不需要下载别人写的代码的解决方案(比如,一个名为ParseIDNUrl的自定义类,重100kB)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-01 00:43:28

parse_url应该可以很好地工作。使用PHP 5.3.4,我只能提取域部分:

代码语言:javascript
复制
print parse_url('http://äxämple.se/foobar', PHP_URL_HOST);

也许你需要调整编码:

代码语言:javascript
复制
print utf8_decode(parse_url('http://äxämple.se/foobar', PHP_URL_HOST));

我得到的输出是:

代码语言:javascript
复制
äxämple.se

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2012-06-01 00:38:25

我很抱歉我没有100%阅读你的帖子。

下面是我可以在这里找到的正则表达式:Properly Matching a IDN URL

代码语言:javascript
复制
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10837654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档