
本文讲解如何修复 URL 中因多余空格导致 ID 被错误编码为 %201 的问题,通过优化 PHP 字符串拼接方式,确保 site_url() 生成的链接准确携带数字 ID(如 /CrudController/edit/1),避免空格引发的 URL 编码异常。
本文讲解如何修复 url 中因多余空格导致 id 被错误编码为 `%201` 的问题,通过优化 php 字符串拼接方式,确保 `site_url()` 生成的链接准确携带数字 id(如 `/crudcontroller/edit/1`),避免空格引发的 url 编码异常。
在 CodeIgniter 中,动态生成带 ID 的操作链接(如编辑)时,一个常见但容易被忽视的错误是:在 PHP 输出语句中混入 HTML 空格,导致 URL 路径中出现不可见的空白字符。例如原始代码:
<td>
<a href="<?php%20echo%20site_url('CrudController/edit');%20?>/%20<?php%20echo%20%24row->id%20?>">Edit</a> | Delete </td>
其中 ?>/
✅ 正确做法是完全在 PHP 内完成字符串拼接,消除 HTML 层面的冗余空格:
<td>
<a href="<?php%20echo%20site_url('CrudController/edit')%20.%20'/'%20.%20%24row->id;%20?>">Edit</a> | Delete </td>
这样生成的 URL 将严格为:
http://example.com/index.php/CrudController/edit/1
⚠️ 同时,请注意控制器方法需接收并处理该 ID 参数。当前的 edit() 方法未获取路由段,应补充如下逻辑:
public function edit($id = null) {
if ($id === null || !is_numeric($id)) {
show_404();
}
$data['record'] = $this->your_model->get_by_id($id); // 示例:根据 ID 查询数据
$this->load->view('crudEdit', $data);
}
此外,确保 routes.php 中启用了基于 URI 段的参数解析(CodeIgniter 3 默认支持),且 .htaccess 配置正确以支持干净 URL(可选,但推荐)。
? 总结:
- 避免在 标签间插入空格或换行用于路径分隔;
- 使用 PHP 字符串连接(.)保证 URL 结构可控;
- 控制器必须声明参数并做基础校验,防止空值或非法输入;
- 浏览器地址栏中出现 %20 是空格编码的明确信号,应优先检查模板中的空格与引号闭合问题。











