我正在使用从 Akelos 框架中提取的 mod_rewrite 和路由系统。
在搜索键参数中使用一些符号时,我遇到了一个非常大的问题。
路由图如下:
$map->connect(":lang/search/:string", array('controller' => 'search','action' => 'index'));
现在在控制器中,我得到$this->registry->map['params']['get']['string']
一个搜索关键字。
我找不到正确编码网址的方法。例如让我们取一个字符串t\ /#%&=
urlencode()
给出t%5C+%2F%23%25%26%3D
和页面显示The requested URL /site/en/search/t\+/#%&= was not found on this server.
rawurlencode()
给出t%5C%20%2F%23%25%26%3D
和页面显示相同。
您可以在此页面上下载或查看路由器类源
我真的不想将 base64 用于 url 和您无法读取任何内容的此类编码。
如果您需要这里还有一个.htaccess
文件内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
更新
如果您有时间,请下载这些文件并在您的服务器上进行测试。
指导:
controllerclass.php
- 简单的控制器框架,通过在其中定义一个“控制器”类使 searchcontroller.php 能够工作
routerclass.php
- 从 Akelos 框架中提取的路由器类,可能存在错误
routes.php
- 一个你定义你的路线的地方,在我们的例子中,我们只有/search/:string
searchcontroller.php
- 测试字符串的基本应用程序 - /search/stringhere 指向此文件
index.php
- 所有启动和路由恰好开始的地方
.htaccess
- 我认为这里没有错误
我认为您不需要更改index.php
, controllerclass.php
, routes.php
,searchcontroller.php
可能存在错误,routerclass.php
或者可能需要一些.htaccess
我不相信的修复。