I was facing same issue for UTF-8 characters
, Everything was working on live server and staging server, but sometime it's breaking on my dev machine. The behavior was so strange, some times characters was encoded properly but on random page reload it was start breaking with Diamond Charters
'���เห็นอเวิลด์!���'
or Question mark
'??�เห็นอเวิลด์!???'
or 85% data was rendering properly 'เห็นอเวิลด์!?��'
but rest 15% was showing unmatched characters. I was looking to fix the issue. So, started with my checklist
1 - Check if Character Header Added in HTML
2 - Check if data proper saved in MySQL table
3 - Check if MySQL has proper encoding settings for UTF-8
4 - Check if Apache has Setting to deal with UTF-8 Character set
5 - Check if simple PHP can echo "เห็นอเวิลด์" output same as input "เห็นอเวิลด์"
6 - Check if PHP sending proper Headers output
7 - Check if MySQL Query getting same data "เห็นอเวิลด์"
8 - Check if "เห็นอเวิลด์" has some html characters, deal with them properly
9 - Check if "เห็นอเวิลด์" passing through any html encode decode function
10- Check if .htaccess all set to deal with UTF-8 Character set
Check all the above list to figure out where something..breaking.
Give a try (I am using Codeigniter):
=================================
:: PHP ini Settings::
=================================
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=6
=================================
:: .htaccess Settings::
=================================
DefaultLanguage en-US
AddDefaultCharset UTF-8
=================================
:: HTML Header Page::
=================================
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
=================================
:: PHP Codeigniter index.php ::
=================================
header('Content-Type: text/html; charset=UTF-8');
=================================
:: Codeigniter config.php ::
=================================
$config['charset'] = 'UTF-8';
=================================
:: Codeigniter database.php ::
=================================
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
=================================
:: Codeigniter helper function (optional)
=================================
if(!function_exists('safe_utf_string')){
function safe_utf_string($utf8string= ''){
$utf8string = htmlspecialchars($utf8string, ENT_QUOTES, 'UTF-8');
return mb_convert_encoding($utf8string, 'UTF-8');
}
}
and Finally don't forget to say Thanks! :) to @djn answer
utf8mb4
in MySQL instead ofutf8
. (Contrast, the non-MySQL termUTF-8
.) – Responsive