2013-10-25 29 views
0

在PHP中給定一串UTF-8數據後,如何將其轉換並保存爲UTF-16LE文件(該特定文件恰好以Indesign爲目標 - 將其作爲標籤文本文檔)。如何使用PHP將UTF-8數據寫入UTF-16LE文件?

數據:

$copy = "<UNICODE-MAC>\n"; 
$copy .= "<Version:8><FeatureSet:InDesign-Roman><ColorTable:=<Black:COLOR:CMYK:Process:0,0,0,1>>\n"; 
$copy .= "A bunch of unicode special characters like ñ, é, etc."; 

我使用下面的代碼,但無濟於事:

file_put_contents("output.txt", pack("S",0xfeff) . $copy); 

回答

0

使用下面的代碼,我已經找到了解決辦法:

這個功能改變的字節順序(從http://shiplu.mokadd.im/95/convert-little-endian-to-big-endian-in-php-or-vice-versa/):

function chbo($num) { 
    $data = dechex($num); 
    if (strlen($data) <= 2) { 
     return $num; 
    } 
    $u = unpack("H*", strrev(pack("H*", $data))); 
    $f = hexdec($u[1]); 
    return $f; 
} 

與utf-8到utf-16LE的轉換一起使用,它會創建一個可以與indesign一起工作的文件:

file_put_contents("output.txt", pack("S",0xfeff). chbo(iconv("UTF-8","UTF-16LE",$copy)); 
1

您可以使用iconv

$copy_utf16 = iconv("UTF-8", "UTF-16LE", $copy); 
file_put_contents("output.txt", $copy_utf16); 

注意,UTF-16LE不不包括字節順序標記,因爲字節順序已被很好地定義。要生成BOM,請改用"UTF-16"

+0

單獨創建的文件(不包含BOM)無法在InDesign中打開(它沒有將其檢測爲UTF-16LE文件),但是我發現了一個包裝UTF-16LE BOM的解決方案,字節順序和你所建議的圖標。謝謝。 – murdaugh

0

或者,你可以使用mb_convert_encoding()如下:

$copy_UTF16LE = mb_convert_encoding($copy,'UTF-16LE','UTF-8');