2017-10-20 104 views
1

为Unicode当我使用json_encode编码西班牙字符它改变了他们这样的:转换西班牙字符用PHP

áéíóú¿¡üñ 

要这样:

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

当我使用此代码:

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

我的问题是如何在使用json_encode之前将字符转换为这种格式?如何将字符转换为我认为unicode(?)格式,如图所示,而不使用json_encode?

iconv() 

,然后转换UTF-8字符串到十六进制:

+0

试试json_encode($ str,JSON_UNESCAPED_UNICODE); – user1844933

+0

对不起,如果我的问题不清楚 - 我想编码西班牙字符到unicode而不使用json_encode - 我认为必须有一个PHP函数这样做,但我找不到它 –

+0

如果你想通用字符支持,最简单事实上是使用'json_encode':'substr(json_encode($ str),1,-1)'。否则,您需要定义如何处理BMP以外的字符; JSON已经定义了它...... – deceze

回答

0

是的,你可以通过字符串转换为UTF-8实现这一

bin2hex() 

转换后,您将需要处理每个字符的编码顺序 - 下面是一个例子:

<?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

请注意,这不适用于BMP以上的字符,比如表情符号。 – deceze

+1

哪个表情符号是“西班牙字符”? ;-) – Rounin

+3

很明显: – deceze