[top-think/think]input function 获取中文URL参数BUG

2023-12-27 461 views
3

支持英文

image

不支持中文 image

在 laravel 中 http://laravel.dev/广州 可以获取 city=广州

回答

9

这是你编码的问题.

4

@momoca 首先,很感谢你的回答,虽然并不能帮助我处理好这个问题。 我可以确定我并不会因为编码的原因导致这个错误 以下是我用到的代码片段

# application/route.php
    '[api]'     => [
        'user/:search'   => ['Api/User/search', ['method' => 'get']],
    ],

#application/api/controller/User.php
    public function search(){
        dump(request()->get('search'));
        return 'user search name '.input('search');
    }

get /api/user/搜索?search=易&a=1 image

get /api/user/search?search=易&a=1 image

这是你编码的问题.

我并不认可是这个原因导致的

6
//url:http://domain.com/message-index.html?search=%E6%98%93
        echo url('Message/index@center', 'search=易');
        var_dump(input());
        var_dump(input('search'));

这个没有问题. 如果正常应该url中的中文应该是以上(%E6%98%93)哪样的.当你使用url函数生成连接时会自动进行转码.

6

我知晓像您这样的使用方式是没有问题的,而我出现的问题并非像您说的那样! 我无法通过自定义路由, 直接获取链接 /user/:search 上的中文参数而可以获取字母数字等

# tp5 route 中文参数例子
//路由中设置 
'user/:search'   => ['User/search', ['method' => 'get']],

get /user/易

// 期待结果
input('search') == '易'

我可在 laravel5.2 中实现该功能 而 tp5 不行

事实上在 ?s=易这种处理上并无问题

您可以测试一下,十分感谢!

0

对于 /user/zh1 这样的支持拓展到 /user/易 以便实现类似 /s/搜索内容 或者 /t/标签 这样的功能 @momoca

1

恩,找到问题了.这是我之前提过一个问题.https://github.com/top-think/framework/issues/267

        \think\Route::domain('center', function () {
            \think\Route::get('user/:search', 'User/index');
        });
        echo url('User/index@center', 'search=易');

返回页代码

print_r(input());
echo strtolower(APP::$namespace . DS . $this->request->module() . DS . config('url_controller_layer') . DS . $this->request->controller() . '::' . $this->request->action());

结果如下:

view-source:http://center.domain.com/user-%E6%98%93.html
//----
Array
(
    [search] => 易
)
app\center\controller\user::index

这是你期望的吧.

2

事实上 get http://tp5.com/user/%E6%98%93.html 一直都可以获取到值,如您所示

Array
(
    [search] => 易
)

而其错误的是内容编码不对

我尝试更清楚的弄明白其原因 image

结果是惊人的 image

我无法理解的结果,我必须指定浏览器为GBK编码才能正确的显示他

@momoca

7

这是我使用 laravel 获取的中文URL参数 image

# app/Http/routes.php
Route::get('{city?}', 'HomeController@index');

# app/Http/Controllers/HomeController.php
    public function index(Request $request){
        echo($request->city);
        die;
    }
1

你去补习一下基本的文件编码知识吧.这个不是tp5的问题.我也已经测试过了.框架本身没有问题. 1.保证您的框架代码是从git下载的. 2.加载的文件都是utf-8的. 3.实在不行就加header.