我有以下代码尝试将UTF-8字符串编码为UCS-2LE。该字符串似乎有效,可以使用mb_check_encoding
进行检查,但是当我在其上运行iconv
时,我会收到以下通知:
注意:iconv():检测到输入字符串中的非法字符
知道问题是什么吗?
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$string = 'Voiture ';
$isValidUTF8 = mb_check_encoding($string, 'UTF-8');
echo 'Is valid UTF-8: ' . ($isValidUTF8 ? 'Yes' : 'No') . "\n";
$text1 = iconv('UTF-8', 'UCS-2LE', $string);
var_dump($text1);
输出:
是否有效UTF-8:是
注意:iconv():检测到输入字符串中的非法字符
布尔(假)
答案 0 :(得分:1)
问题是,不是有效的 UCS-2LE 字符。您可以尝试将
\TRANSLIT
或\IGNORE
附加到输出编码。
使用TRANSLIT应将非现有字符替换为类似字符,IGNORE将其从输出字符串中删除。
你可以这样做,但那没有经过测试,我不确定,如果这适用于UCS-2LE
$text1 = iconv('UTF-8', 'UCS-2LE\\IGNORE', $string);
// or
$text1 = iconv('UTF-8', 'UCS-2LE\\TRANSLIT', $string);
如果你需要表情符号支持,你应该考虑保持UTF-8编码。