Php - Codeigniter网址空间

时间:2016-09-20 16:38:19

标签: php codeigniter uri

我试图做的是当我点击我的特定产品时,而不是我的产品的ID会出现在我的网址中,我想要提供产品的名称。 我今天所做的是base_url / controller / method / id

我想做的是base_url / controller / method / product-name或base_url / controller / method / product_name

但在我的代码中发生的事情是在我的产品名称中所有空格都被%20占用我该怎么做才能用下划线或破折号或者在url中调用产品名称的任何安全方式替换%20。

无论我在$ name(product_name)上获得什么,我都会将它传递给我的模型。

MY CONTROLLER

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>

2 个答案:

答案 0 :(得分:0)

这应该有效,

  <a href="<?= base_url(). 'promos/details/' . str_replace(' ', '_', $promo_row->name); ?>"> </a>

至于- vs _如果你要路由它们,例如说产品名称成为控制器中的一种方法,我认为PHP不允许{{1}在方法名称中,但它也不允许使用空格。您可以使用-作弊,但这是另一天的其他故事。

如果它是一个参数,那么它不应该那么重要。就好像它是方法/函数名称。

- 注意 - 这不是特定于CI的错误,请查看任何网址,告诉我您是否看到空格。

UPdate:作为建议,处理此问题的最佳方法是使用专用于网址名称的字段(例如__call()等)以及何时制作新产品对名称进行转换。然后它是您可以控制的可编辑数据。例如,如果您的产品名称中包含slug,那该怎么办?这可能会导致问题。你可以通过单独为此提供单独的数据来避免这种情况,它甚至可能像SKU号码等。它需要设置更多的工作,但从长远来看更容易维护。

答案 1 :(得分:0)

晚聚会。但是最好是使用urldecode($value)。由于“%20”中的“%”再次被编码为“%25”,因此我们可能不得不两次使用urldecode。在这种情况下-urldecode(urldecode($promo_row->name))