首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过滤输入URL的最佳方式是什么?

问过滤输入URL的最佳方式是什么?
EN

Stack Overflow用户
提问于 2009-02-14 23:30:55
回答 3查看 933关注 0票数 3

我有一个表单,可以接受来自PHP用户的URL。

我应该允许或不允许哪些字符?目前我使用的是

$input= preg_replace("/^a-zA-Z0-9-\?:#.()\,/\&\'\"/","",$string);

$input=substr($input,0,255);

因此,它被裁剪为255个字符,并且只能包含字母、数字和?-_:#(),&‘“/

我应该剥离任何我没有剥离的东西,或者我剥离的任何东西可能需要在一个有效的URL中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-15 00:40:38

定义RFC 1738规范的URL声明只有字符

代码语言:javascript
复制
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+.-

可以在URL方案中使用,并且只能使用字符

代码语言:javascript
复制
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),;/?:@=&

可以在URL的方案特定部分内未编码的情况下使用。(如果未编码地使用;/?:@=&,则必须将其用于“保留目的”,但如果只是检查无效字符,则不必担心)。因此,如果您想要完整的通用性,我会根据下面的正则表达式检查URL:

代码语言:javascript
复制
"/([a-zA-Z+.-]+:\/\/)?([a-zA-Z0-9\$\-_\.\+\!\*'\(\),\;\/\?\:\@\=\&]+)/"

(可能其中的一些转义是不必要的)。如果你只是在寻找HTTP,(一些)其他的答案应该是可以的。

票数 6
EN

Stack Overflow用户

发布于 2009-02-14 23:48:57

对于%20之类的内容,您需要允许使用=符号和%。@符号也是合法的

您可以使用如下所示的正则表达式验证url

代码语言:javascript
复制
/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/

另外,我认为urls中也不允许使用括号和引号。

票数 3
EN

Stack Overflow用户

发布于 2009-02-14 23:57:18

这是我在自己创建的TinyUrl克隆站点上使用的正则表达式:

代码语言:javascript
复制
([a-zA-Z]+://)?([a-z0-9A-Z-]+\.[a-z0-9A-Z\.-]+[a-z0-9A-Z/_?=;%&,+\.\-]+)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/549987

复制
相关文章

相似问题

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