2009-07-24 3 views
7

J'utilise PHP 5.2.6 et le jeu de caractères de mon application est UTF-8.modifier le jeu de caractères par défaut des fonctions PHP comme "htmlspecialchars"

Maintenant, comment dois-je changer le jeu de caractères par défaut de PHP? PAS celui qui spécifie le temps mime et le jeu de caractères de la sortie.

Mais qui va changer pour toute la fonction PHP comme htmlspecialchars, htmlentities, etc.

Je sais, il y a un paramètre dans les fonctions qui prend le jeu de caractères de la chaîne d'entrée. Mais je ne veux pas spécifier pour toutes les fonctions que j'utilise. Et si quelque part j'oublie, ce sera le bordel.

Je sais aussi que je peux envelopper ces fonctions et créer mon propre wrapper comme:

function myHtmlize($str) 
{ 
    return htmlspecialchars($str, ENT_COMPAT, 'UTF-8'); 
} 

Moi aussi, aime pas cette solution. Je veux vraiment dire à PHP, que par défaut, 'UTF-8' est le jeu de caractères. Pas 'iso-8859-1'.

Est-ce possible?

+2

Je ne pense pas que ce soit possible mais c'est une bonne question. +1 – MitMaro

Répondre

2

Comme celui-ci? http://us2.php.net/manual/en/function.setlocale.php

* LC_ALL for all of the below 
* LC_COLLATE for string comparison, see strcoll() 
* LC_CTYPE for character classification and conversion, for example strtoupper() 
* LC_MONETARY for localeconv() 
* LC_NUMERIC for decimal separator (See also localeconv()) 
* LC_TIME for date and time formatting with strftime() 
* LC_MESSAGES for system responses (available if PHP was compiled with libintl) 
+1

Je n'ai pas compris exactement ce que je devais faire .. – Sabya

+0

Avez-vous vérifié celui-ci? http://us2.php.net/manual/fr/function.setlocale.php –

2

Il y a une fonction C determine_charset (char * charset_hint ...) qui est utilisé pour trouver le "droit" charset basé sur

dans cet ordre et selon que certaines extensions sont intégrées ou non.
Le "problème" est, lorsque vous appelez htmlentities ('xyz') ce determine_charset() est appelée avec charset_hint = NULL et la première cette fonction n'est:

/* Guarantee default behaviour for backwards compatibility */ 
if (charset_hint == NULL) 
    return cs_8859_1; 

Vous devez appeler au moins htmlentities ('xyz', ENT_QUOTES, '')

+1

C'est exactement ce dont je veux me débarrasser. – Sabya

+0

Je ne vois pas comment, sauf si vous modifiez le code source de php (le plus probable pour la fonction HtmlEntities) – VolkerK

1

Je ne suis pas tout à fait sûr, mais je pense que mbstring.func_overload travaux avec htmlentities.

htmlspecialchars est charset-neutre btw. (Au moins tant que le charset supporte le sous-ensemble ascii, ce que fait utf-8).

+1

Ce n'est pas tout à fait correct, rien en dehors du ascii/gagnant-1252 gamme sera malmené par htmlentities si vous ne spécifiez pas jeu de caractères. – donatJ

Questions connexes