
本文讲解如何修复 CodeIgniter 中因 URL 空格导致的 ID 编码问题(如 %201),通过规范 PHP 字符串拼接消除多余空格,确保路由参数正确传递。
本文讲解如何修复 codeigniter 中因 url 空格导致的 id 编码问题(如 `%201`),通过规范 php 字符串拼接消除多余空格,确保路由参数正确传递。
在使用 CodeIgniter 构建 CRUD 应用时,常需为每条数据生成带 ID 的编辑链接。但若链接拼接方式不当,极易引入不可见的空格,导致浏览器将空格 URL 编码为 %20,最终使 id=1 变成 id=%201,控制器无法正确接收原始数值。
问题根源在于原始写法中混用了 PHP 标签与 HTML 字符的不安全拼接:
<td><a href="<?php echo site_url('CrudController/edit'); ?>/ <?php echo $row->id ?>">Edit</a> | Delete </td>注意 ?>/ <?php 之间的空格——它被直接嵌入 URL 路径,成为 / 1(斜杠后跟空格再跟数字),浏览器自动将其编码为 / %201。
✅ 正确做法是完全在 PHP 内完成字符串拼接,避免标签切换引入意外空白:
<td><a href="<?php echo site_url('CrudController/edit') . '/' . $row->id; ?>">Edit</a> | Delete</td>该写法:
- 使用 . 运算符连接 site_url() 返回的基路径与 / 和 $row->id;
- 全程无 HTML 空格干扰,输出形如 /index.php/CrudController/edit/1;
- ID 以纯数字形式传递,路由和控制器可直接通过 $this->uri->segment(3) 获取。
⚠️ 补充注意事项:
- Controller 中当前 edit() 方法未接收 ID 参数,需同步更新以支持路由解析:
public function edit($id = null) { if ($id === null || !is_numeric($id)) { show_404(); } $data['record'] = $this->your_model->get_by_id($id); // 示例:查询数据 $this->load->view('crudEdit', $data); } - 确保 routes.php 中启用默认 URI 路由(如未禁用 enable_query_strings),推荐使用标准分段式路由。
- 建议对 $row->id 做基础校验(如 isset()、is_numeric())再输出,提升健壮性。
至此,链接生成干净可靠,ID 传递零误差,为后续编辑逻辑奠定坚实基础。


















