Php - Codeigniter url 个空格
Php - Codeigniter url spaces
我想做的是当我点击我的特定产品时,我的 url 中不会出现我的产品 ID,我想输入产品名称。
我今天做的是 base_url/controller/method/id
我想做的是base_url/controller/method/product-name或者base_url/controller/method/product_name
但是在我的代码中发生的事情是在我的产品名称中所有的空格都被 %20 占用我应该怎么做才能用下划线或破折号或任何安全的方式来替换 %20 在 url.
无论我在 $name(product_name) 上得到什么,我都会将它传递给我的模型。
我的控制器
public function details($name){
$prod_row = $this->PromoModel->getpromorow($name);
$data['promodetail'] = $prod_row;
$data['promo'] = $this->PromoModel->get_promo();
$data['message']= "<h1> NO PROMOS AVAILABLE</h1>";
$this->load->view('include/header',$data);
$this->load->view('include/nav');
$this->load->view('promo/PromoDetail', $data);
$this->load->view('include/footer');
}
我的模型
public function getpromorow($name) {
$this->db->where('name', $name);
$query = $this->db->get('promo');
return $query->row();
}
public function get_promo(){
$query = $this->db->get('promo');
return $query->result();
}
我的看法
<a href="<?= base_url(). 'promos/details/' . $promo_row->name ?>"> </a>
这应该可以,
<a href="<?= base_url(). 'promos/details/' . str_replace(' ', '_', $promo_row->name); ?>"> </a>
至于 -
与 _
如果你要路由到他们,例如说产品名称成为你控制器中的一个方法,我认为 PHP 不允许-
在方法名称中,但它也不允许空格。您可以使用 __call()
作弊,但那是另一回事了。
如果它是一个参数,那么它应该没有那么重要。只是如果它是一个 method/function 名字。
-注意-这不是 CI 特定错误,请查看任何 url,如果您在其中看到空格请告诉我。
UPdate: 作为建议,处理此问题的最佳方法是拥有一个专用于 url 名称的字段(例如 slug
等) 并且在制作新产品时只需对名称进行转换即可。那么它就是您可以控制的可编辑数据。例如,如果您的产品名称中包含 -
怎么办?这可能会导致问题。您可以通过单独的数据来避免这种情况,它甚至可以像 SKU 编号等。设置需要更多工作,但从长远来看 运行 更易于维护。
派对迟到了。但最好是使用 urldecode($value)
。由于“%20”中的“%”再次编码为“%25”,我们可能不得不使用 urldecode
两次。在这种情况下 - urldecode(urldecode($promo_row->name))
我想做的是当我点击我的特定产品时,我的 url 中不会出现我的产品 ID,我想输入产品名称。 我今天做的是 base_url/controller/method/id
我想做的是base_url/controller/method/product-name或者base_url/controller/method/product_name
但是在我的代码中发生的事情是在我的产品名称中所有的空格都被 %20 占用我应该怎么做才能用下划线或破折号或任何安全的方式来替换 %20 在 url.
无论我在 $name(product_name) 上得到什么,我都会将它传递给我的模型。
我的控制器
public function details($name){
$prod_row = $this->PromoModel->getpromorow($name);
$data['promodetail'] = $prod_row;
$data['promo'] = $this->PromoModel->get_promo();
$data['message']= "<h1> NO PROMOS AVAILABLE</h1>";
$this->load->view('include/header',$data);
$this->load->view('include/nav');
$this->load->view('promo/PromoDetail', $data);
$this->load->view('include/footer');
}
我的模型
public function getpromorow($name) {
$this->db->where('name', $name);
$query = $this->db->get('promo');
return $query->row();
}
public function get_promo(){
$query = $this->db->get('promo');
return $query->result();
}
我的看法
<a href="<?= base_url(). 'promos/details/' . $promo_row->name ?>"> </a>
这应该可以,
<a href="<?= base_url(). 'promos/details/' . str_replace(' ', '_', $promo_row->name); ?>"> </a>
至于 -
与 _
如果你要路由到他们,例如说产品名称成为你控制器中的一个方法,我认为 PHP 不允许-
在方法名称中,但它也不允许空格。您可以使用 __call()
作弊,但那是另一回事了。
如果它是一个参数,那么它应该没有那么重要。只是如果它是一个 method/function 名字。
-注意-这不是 CI 特定错误,请查看任何 url,如果您在其中看到空格请告诉我。
UPdate: 作为建议,处理此问题的最佳方法是拥有一个专用于 url 名称的字段(例如 slug
等) 并且在制作新产品时只需对名称进行转换即可。那么它就是您可以控制的可编辑数据。例如,如果您的产品名称中包含 -
怎么办?这可能会导致问题。您可以通过单独的数据来避免这种情况,它甚至可以像 SKU 编号等。设置需要更多工作,但从长远来看 运行 更易于维护。
派对迟到了。但最好是使用 urldecode($value)
。由于“%20”中的“%”再次编码为“%25”,我们可能不得不使用 urldecode
两次。在这种情况下 - urldecode(urldecode($promo_row->name))