Специальные символы работают везде, но не в контроллере кода - PullRequest
0 голосов
/ 20 мая 2018

У меня есть база данных для ресторана. Владелец будет добавлять такие категории, как «Пицца», «Десерт» или «Ризотто» (без акцентов или специальных символов) или категории со специальными символами / акцентами, такими как 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; ?>

. Используя это, URL будет http://localhost/quartiere/bar/name_of_the_category, если название категории будет иметь 2 или более слов.или http://localhost/quartiere/bar/nameofthecategory, если имя категории будет содержать только одно слово.

Когда пользователь нажимает на категорию, сервер выполнит следующие действия:

  1. Получить идентификаторкатегории с использованием имени категории (из URL)
  2. Получить продукты с определенным идентификатором категории
  3. Отображать их на странице.

Проблема заключается в том, что прикатегория со специальными символами нажата, чтобыбаза данных не будет иметь нормального имени ... она будет выглядеть примерно так (для слова Pălincă) -> 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 голосов
/ 21 мая 2018

Звучит так, будто вам просто нужно:

urldecode()

Декодирует любую кодировку% ## в данной строке.Символы плюс ('+') декодируются до пробела.

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