我不想重新發明輪子,但我找不到任何可以完美實現這一點的圖書館。PHP自動更正網址
在我的腳本用戶可以保存的網址,我想如果他們給我名單,如:
google.com
www.msn.com
http://bing.com/
and so on...
我希望能夠在「正確的格式」數據庫來保存。
我做的是我檢查它是否有協議,如果它不存在我添加它,然後驗證網址對RegExp。
對於PHP parse_url,任何包含協議的URL都是有效的,所以它沒有太多幫助。
你是如何做這件事的,你有一些想法,你想與我分享?
編輯:
我想篩選出來自用戶的輸入無效的URL(URL列表)。更重要的是,要嘗試自動更正無效的網址(例如不包含協議)。一個用戶輸入列表,它應該立即驗證(沒時間打開URL來檢查它們確實存在)。
從URL中提取部分會很好,例如parse_url
,但parse_url
的問題在於,它對無效的URL不起作用。我嘗試使用它來解析URL,以及缺少(並且必需)添加默認項的部分(例如無協議,添加http)。但「google.com」的parse_url
不會返回「google.com」作爲主機名,而是路徑。
這看起來非常常見的問題給我,但我無法找到互聯網上可用的解決方案(發現了一些庫,將標準化URL,但他們不會修復URL,如果它是無效的)。
有一些「聰明」的解決方案,這一點,或者我應該用我目前的堅持:
- 找到第一次出現://和驗證,如果它之前的文本是有效的協議,如果缺少添加協議
- 發現下一次出現/和驗證是通過主機名正則表達式整個URL是有效的格式
- 良好的措施驗證一次
我只是感覺,我會拒絕索姆e有效的URL,對我而言,最好有誤報,即假陰性。
爲什麼'parse_url()'不足? – kba
這種事情真的很難。你是否試圖確保它們是有效的,或只是他們「看起來」有效。例如,如果有人輸入http://subdomain.domain/你想用它做什麼?嚴格來說,這是一個無效的域名,因爲沒有tld?這種類型的問題可能會從徹頭徹尾的懶散黑客中擺脫出來,過度使用 - 你能否更詳細地解釋你想要在解決方案的哪個位置? – Trent