2016-01-24 35 views
0

我需要编写简单的路由系统,我只有一个问题。PHP URL/slug接受字符

当我有这样

/article/1/simple-article-1 

哪些字符应该被允许有URL /塞。

当然,字母,数字,' - ','/'和?

+0

'AZ 0-9〜%:_()@ \ - ' 改变为按需要 – devpro

+0

看一看这个金属块发生器功能http://cubiq.org/the -perfect-php-clean-url-generator并记住国际字符。如果您知道生成段落URL的方式,则可以调整重定向规则。 – pmayer

回答

1

的.htaccess:

Options -Indexes 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 

PHP:

if(isset($_SERVER['QUERY_STRING'])) { 
    if(!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $_SERVER['QUERY_STRING'])) { 
     return false; 
    } 

    $info = explode('/', $_SERVER['QUERY_STRING']); 

    .... 
} 
0

哪些字符应该允许存在。

一般蛞蝓全部小写,重音字符代替通过由-_取代了英语字母表的字母和空格字符。通常会删除句号,逗号,问号,感叹号,撇号和引号等标点符号。它也可能被截断以保持合理的长度。

可具有在URI的特定含义的保留字符是:!*'();:@&=+$/?#[]。如果字符与保留字符的用途相冲突,那么冲突数据必须在URI形成之前进行百分比编码。

一旦你的产品的URI,从它的组成部分,如果你想添加不属于字母,数字字符,-._~你应该总是percent-encoding它。

例子:

/article/1/i!want!use!the!exclamation!mark <-- bad 
/article/1/i%21want%21use%21the%21exclamation%21mark <-- good