2017-10-20 12 views
1

Lorsque j'utilise json_encode pour encoder les caractères espagnols il les change de ceci:Convertir des caractères espagnols en unicode avec PHP

áéíóú¿¡üñ 

à ceci:

\u00e1\u00e9\u00ed\u00f3\u00fa\u00bf\u00a1\u00fc\u00f1 

Lorsque j'utilise ce code:

$str = array(); 
$str[] = 'áéíóú¿¡üñ'; 
$str[] = 'áéíóú¿¡üñ'; 
$json_data = json_encode($str); 

Ma question est comment puis-je convertir les caractères à ce format avant d'utiliser json_encode? Comment puis-je convertir les caractères au format Unicode (?), Comme indiqué, sans utiliser json_encode?

+0

try json_encode ($ str, JSON_UNESCAPED_UNICODE); – user1844933

+0

Désolé si ma question n'était pas claire - Je veux encoder des caractères espagnols en unicode sans utiliser json_encode - Je pense qu'il doit y avoir une fonction PHP qui le fait mais je ne peux pas le trouver –

+0

Si vous voulez un support de caractères universel, le plus simple chose est vraiment d'utiliser 'json_encode':' substr (json_encode ($ str), 1, -1) '. Sinon, vous devrez définir ce qu'il faut faire des caractères en dehors du BMP; JSON le définit déjà ... – deceze

Répondre

0

Oui, vous pouvez obtenir en convertissant la chaîne à UTF-8 avec:

iconv() 

puis convertir la chaîne UTF-8 à format hexadécimal avec:

bin2hex() 

Après la conversion, vous devrez manipuler l'ordre de l'encodage de chaque caractère - voici un exemple ci-dessous:

<?php 
$spanishCharacterString = 'áéíóú¿¡üñ'; 

/* Convert the string to UTF-8 and then into hexadecimal */ 
$encodedSpanishCharacterString = bin2hex(iconv('UTF-8', 'UCS-2', $spanishCharacterString)); 

/* Break string into individual characters */ 
$spanishCharacterArray = str_split($encodedSpanishCharacterString, 4); 

/* Format the encoding of each character */ 
for ($i = 0; $i < count($spanishCharacterArray); $i++) { 
    $spanishCharacterArray[$i] = '\u'.substr($spanishCharacterArray[$i], -2, 2).substr($spanishCharacterArray[$i], 0, 2); 
} 

/* Join the encoded characters back up again */ 
$convertedSpanishCharacterString = implode($spanishCharacterArray); 

echo $convertedSpanishCharacterString; 

?> 
+0

Notez que cela ne va pas fonctionner pour les caractères au-dessus du BMP, comme les emoji. – deceze

+1

Quels emojis sont des "caractères espagnols"? ;-) – Rounin

+3

Tout à fait évidemment: – deceze