2017-06-08 127 views
0

我有下面的代碼試圖將UTF-8字符串編碼到UCS-2LE。該字符串似乎是有效的,因爲可以用mb_check_encoding進行檢查,但是當我在其上運行iconv,我得到通知如下:帶有表情符號的字符串似乎是有效的UTF-8,但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

嘗試忽略參數。讓我知道如果你有任何其他解決方案 –

+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編碼。

+0

這對我來說沒有意義。當然,輸入字符不是有效的ucs-2cs,因爲它們是utf-8,而iconv的要點是將字符串轉換爲另一個字符串。在這種情況下,輸入是有效的UTF-8,至少根據以前的檢查。 –

+0

@ this.lau_由於您的表情符號不在UCS-2LE的字符表中,因此您無法將其轉換爲UCS-2LE。 – Philipp

相關問題