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))