【问题标题】:How do I ALLOW apostrophe in htaccess RewriteRule regex?如何在 htaccess RewriteRule 正则表达式中允许撇号?
【发布时间】:2015-11-20 04:05:14
【问题描述】:

我正在从数据库中检索菜单,其中一些菜单的名称中有一个撇号 - ' -。 在我的代码的一部分中,我必须将数据库中的名称与 url 进行比较,但是当 url 有撇号时它会失败。

例如:

当我从数据库中得到名称时,我得到它的原样:foo's

但是从网址,即使网址是web.com?menu=foo's,当我这样做时:

$menu = urldecode($_GET['menu']);

我只收到foo

这是我的 htaccess 重写

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^explore/([0-9a-zA-Z\ ]+) renderpage.php?menu=$1 [L]

我已经在我的 php 中尝试了所有可能的组合,但不是这样,而是这个 RewriteRule 不允许撇号,我也在我的正则表达式中尝试了 ([0-9a-zA-Z\ ']+)([0-9a-zA-Z\ \']+) 但无济于事。

【问题讨论】:

  • 你试过这个正则表达式RewriteRule ^explore/([^/]+)
  • 对不起,我睡着了,用这个正则表达式它显示我喜欢这个 foo\'s
  • 不过没关系,我做个str_replace,就够了

标签: php regex .htaccess mod-rewrite


【解决方案1】:

我认为问题出在撇号的位置试试这个:

([0-9a-zA-Z'\]+)

([0-9a-zA-Z']+)

【讨论】:

  • 这也有效,但它显示如下: foo\'s 。但这已经足够了,我会做一个 str_replace
  • 这是因为我也必须允许空格,但我必须把它放在空格之前
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多