使用PHP将混合字符串转换为UTF16

时间:2013-01-03 13:14:01

标签: unicode encoding

我在PHP中有一个字符串,如下所示:

  

INPUT =“Γιώργοανστείλειςαυτόακριβώς(:

它是一个混合字符串,同时包含GREEK和LATIN字符。我希望给定字符串中的所有字符都转换为此字符串

  

OUTPUT = 0022039303B903CE03C103B303BF002003B103BD002003C303C403B503AF03BB03B503B903C2002003B103C503C403CC002003B103BA03C103B903B203CE03C200200028003A

如何将输入转换为此类输出?

2 个答案:

答案 0 :(得分:5)

我花了一段时间才弄明白,但似乎你想要做的是将UTF-8字符串转换为其UTF-16表示的大写二进制转储。就这么简单:

$input = '"Γιώργο αν στείλεις αυτό ακριβώς (:';
$output = mb_strtoupper(bin2hex(mb_convert_encoding($input, 'UTF-16BE', 'UTF-8')));

BE后缀表示Big Endian,根据您的示例,它似乎是预期的字节顺序。

答案 1 :(得分:1)

你试过iconv吗?也许是这样的: (编辑)我明白你的主要目标是能够将这个转换后的字符串通过http传输到你的服务,在这种情况下你可以在结果上使用 base64_encode()。 请参阅完整的代码示例:

<?php
    $string = str_replace(' ', '', "Γιώργο αν στείλεις αυτό ακριβώς");
    $converted = iconv('UTF-8', 'UTF-16', $string);
    $encoded = base64_encode($converted);

    var_dump($encoded);
    var_dump(iconv('UTF-16', 'UTF-8', base64_decode($encoded)));
?>

你会得到:

编码:字符串'/ v8DkwO5A84DwQOzA78DsQO9A8MDxAO1A68DuwO1A7kDwgOxA8UDxAPMA7EDugPBA7kDsgPOA8I ='(长= 76) 已解码:字符串'Γιώργοανστείλειςαυτόακριβώς'(length = 54)