J'étais confronté au même problème pour UTF-8 characters
, Tout fonctionnait sur le serveur live et le serveur de transfert, mais parfois, il se brise sur ma machine dev. Le comportement était si étrange, certains caractères fois été codés correctement, mais à la page au hasard reload il a été commencer rupture avec Diamond Charters
'���เห็นอเวิลด์!���'
ou Question mark
'??�เห็นอเวิลด์!???'
ou des données de 85% a été le rendu correctement 'เห็นอเวิลด์!?��'
mais reposer 15% montrait des personnages inégalés. Je cherchais à résoudre le problème.Alors, a commencé avec ma liste de contrôle
1 - Vérifier si le caractère en-tête Ajouté en HTML
2 - Vérifiez si les données correctes enregistrées dans le tableau MySQL
3 - Vérifiez si MySQL a des paramètres appropriés de codage pour UTF-8
4 - Vérifiez si Apache a Configuration de traiter UTF-8 Jeu de caractères
5 - Vérifiez si PHP simple peut echo "เห็น อ เวิลด์" sortie même en entrée "เห็น อ เวิลด์"
6 - Vérifiez si PHP envoyer une bonne sortie en-têtes
7 - Vérifiez si la requête MySQL g ise mêmes données "เห็น อ เวิลด์"
8 - Vérifiez si "เห็น อ เวิลด์" a quelques caractères html, les traiter correctement
9 - Vérifier si "เห็น อ เวิลด์" passant par un ny encode html decode fonction
10- Vérifiez si .htaccess prêt à traiter avec caractères UTF-8
Vérifiez tout ce qui précède liste pour comprendre où quelque chose .. rupture.
donner un essai (j'utilise 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');
}
}
et enfin ne pas oublier de dire Merci! :) à @djn
J'ai utilisé avec succès des installations PHP standard avec des fichiers sources UTF-8 générant des sorties UTF-8 incluant des caractères spéciaux UTF-8 comme ♕ ⚐ et ✔ depuis 4.1.x. :) – Pascal
Obtenir une sortie UTF-8 correcte ne prouve pas que votre code analyse correctement ** input ** et qu'il est protégé contre les séquences malveillantes. – Pacerier
** Mise à jour ** Tout au long de ce Q & A, pensez à utiliser 'utf8mb4' dans MySQL au lieu de' utf8'. (Contraste, le terme non-MySQL 'UTF-8'.) –