如何允许#?和URL中的字符,同时仍允许查询字符串

时间:2019-10-30 20:04:33

标签: php .htaccess

我有一个站点,允许用户根据用户输入example.com/My Page

创建页面

问题是,他们是否创建类似example.com/H & E Photosexample.com/#1 Fan Club的网址

一旦php对URL进行解码,它将尝试将这些字符解析为哈希值(对于?,则为查询字符串)

在我的.htacess中,我正在([^/]+?)

处理这种情况的典型方法是什么?理想情况下,无需使用id系统(example.com/131234121)。我的计划不佳:(

编辑。在这里谈论PHP。到达服务器时对url进行编码,php在解析正则表达式和url之前进行解码

2 个答案:

答案 0 :(得分:0)

如果您正在使用PHP创建/处理用于存储用户输入的URL的条目,则在尝试处理该字符串之前,请对该字符串使用htmlentities。

https://www.php.net/manual/en/function.htmlentities.php https://www.w3schools.com/php/func_string_htmlentities.asp

答案 1 :(得分:0)

显然,我正在寻找的是重写标志。

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteflags

B Escape non-alphanumeric characters before applying the transformation.

这使您可以将百分比编码的字符串发送到URL,而无需事先对其进行解码。

所以这实际上是一个Apache的事情,而不是PHP。对不起误导性问题。