0

我有以下代码尝试将 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():在输入字符串中检测到非法字符

布尔(假)

4

1 回答 1

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 编码。

于 2017-06-08T22:53:11.573 回答