I am having trouble with PHP regarding encoding.
I have a JavaScript/jQuery HTML5 page interact with my PHP script using $.post. However, PHP is facing a weird problem, probably related to encoding.
When I write
htmlentities("í")
I expect PHP to output í
. However, instead it outputs í
At the beginning, I thought that I was making some mistake with the encodings, however
htmlentities("í")=="í"?"Good":"Fail";
is outputing "Fail", where
htmlentities("í")=="í"?"Good":"Fail";
But htmlentities($search, null, "utf-8")
works as expected.
I want to have PHP communicate with a MySQL server, but it has encoding problems too, even if I use utf8_encode. What should I do?
EDIT: On the SQL command, writing
SELECT id,uid,type,value FROM users,profile
WHERE uid=id AND type='name' AND value='XXX';
where XXX contains no í chars, works as expected, but it does not if there is any 'í' char.
SET NAMES 'utf8';
SET CHARACTER SET 'utf8';
SELECT id,uid,type,value FROM users,profile
WHERE uid=id AND type='name' AND value='XXX';
Not only fails for í chars, but it ALSO fails for strings without any 'special' characters. Removing the ' chars from SET NAMES and SET CHARACTER SET doesn't seem to change anything.
I am connecting to the MySQL database using PDO.
EDIT 2: I am using MySQL version 5.1.30 of XAMPP for Linux.
EDIT 3: Running SHOW VARIABLES LIKE '%character%'
from PhpMyAdmin outputs
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /opt/lampp/share/mysql/charsets/
Running the same query from my PHP script(with print_r) outputs:
Array
(
[0] => Array
(
[Variable_name] => character_set_client
[0] => character_set_client
[Value] => latin1
[1] => latin1
)
[1] => Array
(
[Variable_name] => character_set_connection
[0] => character_set_connection
[Value] => latin1
[1] => latin1
)
[2] => Array
(
[Variable_name] => character_set_database
[0] => character_set_database
[Value] => latin1
[1] => latin1
)
[3] => Array
(
[Variable_name] => character_set_filesystem
[0] => character_set_filesystem
[Value] => binary
[1] => binary
)
[4] => Array
(
[Variable_name] => character_set_results
[0] => character_set_results
[Value] => latin1
[1] => latin1
)
[5] => Array
(
[Variable_name] => character_set_server
[0] => character_set_server
[Value] => latin1
[1] => latin1
)
[6] => Array
(
[Variable_name] => character_set_system
[0] => character_set_system
[Value] => utf8
[1] => utf8
)
[7] => Array
(
[Variable_name] => character_sets_dir
[0] => character_sets_dir
[Value] => /opt/lampp/share/mysql/charsets/
[1] => /opt/lampp/share/mysql/charsets/
)
)
Running
SET NAMES 'utf8';
SET CHARACTER SET 'utf8';
SHOW VARIABLES LIKE '%character%'
outputs an empty array.