如何从Zend框架3中的路由中提取特殊字符

时间:2018-12-18 15:22:35

标签: regex zend-framework routes zend-framework3 zend-route

我发送的网址中包含特殊字符。

/contacts?advanceSearch=true&advanceSearchType=rating&advanceSearchValue=A1A+

您看到advanceSearchValue的变量值为A1A+

但是当我在控制器中检索到这个

$this->params()->fromQuery("advanceSearchValue");

它显示A1A。它增加了空间,而不是+

这是我的路线配置。

"contacts"                   => [
            "type"                   => "segment",
            "options"                => [
                "route"              => "/contacts[/:action[/:id]]",

                "defaults"           => [
                    "controller"     => Controller\ContactController::class,
                    "action"         => "index",
                ],
            ],
        ],

2 个答案:

答案 0 :(得分:1)

这是因为+在URL中具有特殊含义,而Zend知道这一点,并正确地将其替换为空格。

要将+字符放入已解析的数据中,您需要对其进行URL转义。这给出了值%2B

因此您的完整网址应为

/contacts?advanceSearch=true&advanceSearchType=rating&advanceSearchValue=A1A%2B

顺便问一下,产生此URL的方式是什么,Web浏览器在将+字符发送到Web服务器之前应该自动将其转换?

答案 1 :(得分:0)

您需要对您的request-url进行编码: 您可以使用php或Javascript对其进行编码-

在javascript中:

var url= "/contacts?advanceSearch=true&advanceSearchType=rating&advanceSearchValue=A1A+";
 url= encodeURI(uri);

在php中:

$url = urlencode('/contacts?advanceSearch=true&advanceSearchType=rating&advanceSearchValue=A1A+');

然后在您的ajax中使用此编码的网址。