特殊字符在任何地方都有效,但在控制器codeigniter中没有

时间:2018-05-20 18:53:14

标签: php codeigniter special-characters

我有一个餐馆的数据库。所有者将添加像Pizza,Desert或Risotto(没有口音或特殊字符)或具有特殊字符/口音的类别,如Salată,Peşte或Vodkă(罗马尼亚字符)。

类别表设置为接受特殊字符。我使用了ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8

在导航栏中,我有一个包含所有产品(食物和酒吧)的下拉列表。

要访问我正在使用GET的一个类别:

<?php foreach ($categories_bar as $category): ?>
       <a class="dropdown-item" href="<?php echo site_url('/bar/'.implode('_',explode(" ",$category['category_name']))); ?>"><?php echo $category['category_name']; ?></a>
<?php endforeach; ?>

如果类别名称包含2个或更多单词,则URL将为http://localhost/quartiere/bar/name_of_the_category;如果类别名称仅包含一个单词,则http://localhost/quartiere/bar/nameofthecategory将为Here is the exact error message I receive when I try to access the distance that I tried to retrieve from the file

当用户点击某个类别时,服务器将执行以下操作:

  1. 使用类别名称(来自网址)
  2. 获取类别的ID
  3. 获取具有特定类别ID的产品
  4. 在页面上显示它们。
  5. 问题在于,当点击具有特殊字符的类别时,数据库将不会使用正常的名称...它将是这样的(对于单词Pălincă) - &gt; P%C4%83linc%C4%83

    奇怪的是,在下拉列表中,名称显示正确。

    应该显示每个类别的产品的功能是这个。一开始我正在逆转我在navbar中进行的爆炸冲击过程。这样我将有一个字符串就像数据库中的字符串:

    public function bar_view($name = NULL){
            $name_to_pass = implode(' ',explode('_',$name));
            $category = $this->products_model->get_category_id($name_to_pass);
            $products = $this->products_model->get_bar_prods_by_category($category);
    
            $data['title'] = $name_to_pass;
            $data['products'] = $products;
    
            if(empty($data['products'])){
                show_404();
            }
            $this->load->view('templates/header');
            $this->load->view('menu/bar_view',$data);
            $this->load->view('templates/footer');
        }
    

    指定:

    1. head我有<meta charset="utf-8">
    2. 在配置文件中,我有$config['charset'] = 'utf-8';
    3. 在数据库文件中,我有'char_set' => 'utf8''dbcollat' => 'utf8_general_ci'

1 个答案:

答案 0 :(得分:1)

听起来你只需要:

urldecode()

  

解码给定字符串中的任何%##编码。加号(&#39; +&#39;)是   解码为空格字符。

$name_to_pass = implode(' ',explode('_', urldecode($name)));