我有一个餐馆的数据库。所有者将添加像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。
当用户点击某个类别时,服务器将执行以下操作:
问题在于,当点击具有特殊字符的类别时,数据库将不会使用正常的名称...它将是这样的(对于单词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');
}
指定:
head
我有<meta charset="utf-8">
$config['charset'] = 'utf-8';
'char_set' => 'utf8'
和'dbcollat' => 'utf8_general_ci'
答案 0 :(得分:1)
听起来你只需要:
urldecode()
解码给定字符串中的任何%##编码。加号(&#39; +&#39;)是 解码为空格字符。
$name_to_pass = implode(' ',explode('_', urldecode($name)));