Problème avec diacritiques et mb_substr
Question
Je suis tranchage chaîne unicode avec diacritiques en utilisant la fonction de mb_substr
, mais il fonctionne comme j'utiliser la fonction substr
simple. Il se divise en caractères unicode moitié affichage question diamant marquée.
par exemple.
echo mb_substr('ááááá', 0, 5); //Displays áá�
Qu'est-ce qui pourrait être erroné?
La solution
J'ai le même problème si je ne spécifie pas l'encodage comme le dernier paramètre mb_substr
: valeur par défaut , au moins sur mon serveur, à ISO-8859-1
.
Mais, si je mets le codage correctement, à UTF-8
, il fonctionne OK:
echo mb_substr('ááááá', 0, 5, 'UTF-8');
Obtient l'écran de droite dans le navigateur:
ááááá
Voir mb_substr
(citant, Souligné par l'auteur) :
string mb_substr ( string $str , int $start [,
int $length [, string $encoding ]] )
Le paramètre est
encoding
le codage des caractères. Si elle est omis, le caractère interne valeur de codage sera utilisé .
Autres conseils
J'ai eu le même problème et les réponses ci-dessus m'a aidé aussi. A côté de la mise en php.ini
ou en utilisant ini_set()
, il peut aussi aider à utiliser mb_internal_encoding('utf-8');
( utf-8
peut être remplacé à votre choix) pour définir le codage permanent pour les fonctions multi-octets.