我有一个表单,可以接受来自PHP用户的URL。
我应该允许或不允许哪些字符?目前我使用的是
$input= preg_replace("/^a-zA-Z0-9-\?:#.()\,/\&\'\"/","",$string);
$input=substr($input,0,255);
因此,它被裁剪为255个字符,并且只能包含字母、数字和?-_:#(),&‘“/
我应该剥离任何我没有剥离的东西,或者我剥离的任何东西可能需要在一个有效的URL中?
发布于 2009-02-15 00:40:38
定义RFC 1738规范的URL声明只有字符
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+.-可以在URL方案中使用,并且只能使用字符
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),;/?:@=&可以在URL的方案特定部分内未编码的情况下使用。(如果未编码地使用;/?:@=&,则必须将其用于“保留目的”,但如果只是检查无效字符,则不必担心)。因此,如果您想要完整的通用性,我会根据下面的正则表达式检查URL:
"/([a-zA-Z+.-]+:\/\/)?([a-zA-Z0-9\$\-_\.\+\!\*'\(\),\;\/\?\:\@\=\&]+)/"(可能其中的一些转义是不必要的)。如果你只是在寻找HTTP,(一些)其他的答案应该是可以的。
发布于 2009-02-14 23:48:57
对于%20之类的内容,您需要允许使用=符号和%。@符号也是合法的
您可以使用如下所示的正则表达式验证url
/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/另外,我认为urls中也不允许使用括号和引号。
发布于 2009-02-14 23:57:18
这是我在自己创建的TinyUrl克隆站点上使用的正则表达式:
([a-zA-Z]+://)?([a-z0-9A-Z-]+\.[a-z0-9A-Z\.-]+[a-z0-9A-Z/_?=;%&,+\.\-]+)https://stackoverflow.com/questions/549987
复制相似问题