I am working on a page that uses JavaScipt to send data to a PHP script via AJAX POST. The problem is, if the input is in a language that is not Latin based I end-up storing gibberish in the MySQL table. Latin alphabet works fine.
The page itself is capable to rendering UTF-8 characters, if they are in a data provided on page load, it's the post that I struggle with.
Here's a DEMO page. Drag a "card" onto yellow field on the right and a modal will appear. Enter a word "test" in Arabic
اختبار
and save. See the Network POST request in browser's dev tools.
The post is made through the following JS function
function createEmptyStack(stackTitle) {
return $.ajax({
type:'POST',
url:'ajax.php',
data: {
"do": 'createEmptyStack',
newTitle: stackTitle
},
dataType: "json"
});
}
Here's my PHP code.
header('Content-Type: text/html; charset=utf-8');
$newTitle = trim($_POST['newTitle']);
$db->query("
INSERT INTO t1(project_id, label)
VALUES (".$_SESSION['project_id'].", '".$newTitle."')");
When I check for encoding on the page like this:
mb_detect_encoding($_POST['newTitle'], "auto");
I get result: UTF-8
I also tried the following header:
header("Content-type: application/json; charset=utf-8");
MySQL table collation where the data is supposed to go is set to utf8_general_ci
I have another page that has a form where users populate the same table and it works perfectly fine with ANY language. When I check on the other page why it is capable of inserting similar data into db successfully I see the following above insert query:
mysql_query("SET NAMES utf8");
I've attempted putting the same line above my query that the data still looks gibberish. I also tried the following couple alternatives:
mysql_query("SET CHARACTER SET utf8 ");
and
mysql_set_charset('utf8', $db);
...but to no avail. I'm stomped. Need help getting it figured out.
Environment:
PHP 5.6.40 (cgi-fcgi)
MySQL 5.6.45
Thanks
from Adding UTF-8 support to JS/PHP script
No comments:
Post a Comment