我使用以下代码将西班牙语字符转换为普通英文字符:
function test_enc($text)
{
setlocale(LC_ALL, 'en_US.utf8');
return iconv('utf8', 'ascii//TRANSLIT', $text);
}
echo test_enc('TéstFirst'); returns TestFirst
并且它工作正常,但是当我从具有相同值的其他数组动态传递此参数时,它返回的内容没有:
echo test_enc($data['firstname']);
我使用了var_dump来查看差异,并返回以下内容:
var_dump('TéstFirst');//returned string(10) "TéstFirst"
var_dump($data['travelername']);// returned string(9) "TéstFirst"
请让我知道我做错了什么。
答案 0 :(得分:1)
根据var_dump(bin2hex($data['firstname']))
提供的string(18) "54e973744669727374"
输出,此字符串无效UTF-8。因此,如果您尝试将从 utf8转换为iconv
中的任何其他内容,则会向您显示错误,告诉您它无效utf8并返回false
。
var_dump(iconv('utf8', 'ascii//TRANSLIT', hex2bin("54e973744669727374")));
这会给你
PHP Notice: iconv(): Detected an illegal character in input string in ... on line ... bool(false)
我们可能试图做的是首先尝试将此字符串转换为有效的UTF-8,然后使用iconv
TRANSLIT
。现在我们只是告诉iconv
它已经有效的utf8,它显然不是。
var_dump(utf8_encode(hex2bin("54e973744669727374"))); //string(10) "TéstFirst"
//string(9) "TestFirst"
var_dump(iconv('utf8', 'ascii//TRANSLIT', utf8_encode(hex2bin("54e973744669727374"))));
最好只查阅您正在使用的API的文档,并确定他们将数据发送到哪个字符编码,以便安全地将其转换为utf8。