使用动态变量时 iconv 不工作
iconv not working when dynamic variable is used
我正在使用以下代码将西班牙语字符转换为普通英语字符:
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 和 return 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。
我正在使用以下代码将西班牙语字符转换为普通英语字符:
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 和 return 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。