Search code examples
phpmysqlcodeignitercharacter-encodingmultibyte-characters

SELECT query failing to find row after applying utf8_decode() and urldecode() to accented user input


I am just trying to do the basic search in the CodeIgniter.

Controller

$brand = $this->uri->segment(2);
$brand = utf8_decode(urldecode($brand));
$search['type'] = 5;
$search['title'] = $brand;
$this->data['deal_brand'] = $this->manage_m->search($search);
print_r($this->data['deal_brand']);

Model

function search($search)
{
    $query = $this->db->get_where('manage', $search);
    return $query->first_row();
}

the search works for the following

www.mydomain.com/deal/audi

and not works for

www.mydomain.com/deal/citroën

When I get the last query, it prints

SELECT * FROM (`manage`) WHERE `type` = 5 AND `title` = 'citroën'

The query looks correct, but it's not working. It works when I copy this and run it in the mysql server or via a static query like below

$query = $this->db->query("SELECT * FROM (`manage`) WHERE `type` = 5 AND `title` = 'citroën'");
print_r($query->result());

Solution

  • Your problem is this : utf8_decode

    From the docs : This function decodes data, assumed to be UTF-8 encoded, to ISO-8859-1.

    This is clearly not what you want to do, Your entire software is in UTF-8, no reason to convert it to ISO-8859-1.