You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义WordPress REST API传阿拉伯语搜索参数报404问题

问题根源

你遇到的阿拉伯语参数触发rest_no_route404错误,和Unicode处理、JSON编码无关,核心是三个代码层面的问题:

  • 路由正则的命名捕获组语法写错:你写的(?p<request>.+)不符合PCRE正则规范,命名组的P必须大写,小写p会导致非ASCII字符场景下正则匹配直接失效
  • 直接把多字节的阿拉伯语字符放在URL路径段做匹配时,没有开启路由的UTF-8多字节支持,很容易触发路径校验拦截
  • 回调里多余的JSON_encode操作没有实际意义,还可能导致参数解析异常
推荐解决方案(兼容性最高)

不要把搜索关键词作为路径段捕获,改用REST API标准的查询参数传参,彻底规避多字节字符路径匹配问题。

修正后的路由注册代码

add_action('rest_api_init', function() {
    register_rest_route( 'wm/v1', '/search', array(
        'methods' => WP_REST_Server::READABLE,
        'callback' => 'wm_search_post',
        'args' => array(
            'request' => array(
                'required' => true,
                'sanitize_callback' => 'sanitize_text_field'
            )
        )
    ) );
});

修正后的回调函数代码

function wm_search_post(WP_REST_Request $request){
    // 直接获取参数即可,WordPress会自动完成URL解码、多字节字符解析
    $search_keyword = $request->get_param('request');
    return [
        'received_keyword' => $search_keyword
    ];
}

调用方式

请求时把阿拉伯语搜索词作为查询参数传入即可,示例端点格式:
/wp-json/wm/v1/search?request=你的阿拉伯语搜索词
浏览器会自动对非ASCII字符做URL编码,WordPress端会自动还原,不会出现404问题。

备选方案(坚持用路径传参的场景)

如果一定要把搜索词放在URL路径里,需要修正正则语法同时开启UTF-8多字节匹配支持:

add_action('rest_api_init', function() {
    // 注意正则里P大写,最后register_rest_route第四个参数传true开启utf8支持
    register_rest_route( 'wm/v1', '/search/(?P<request>.+)', array(
        'methods' => WP_REST_Server::READABLE,
        'callback' => 'wm_search_post',
    ), true );
});

注意:该方案在部分配置了特殊路径字符拦截的Nginx/Apache环境下依然可能失效,优先选择查询参数传参的方案。

内容的提问来源于stack exchange,提问作者eng.malek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:15:51