我正在使用以下代码将西班牙语字符转换为普通英语字符:
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"
请让我知道我在做什么错。
根据提供的输出var_dump(bin2hex($data['firstname']))
结果string(18) "54e973744669727374"
,该字符串不是有效的UTF-8。因此,如果您尝试将其从utf8转换为其他任何内容,iconv
都会出现错误,告诉您utf8无效并返回false
。
var_dump(iconv('utf8', 'ascii//TRANSLIT', hex2bin("54e973744669727374")));
这给你
PHP注意:iconv():在...行上的...中检测到输入字符串中的非法字符 布尔值(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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句