-2

我在 PHP 中有一个这样的字符串:

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

它是同时包含希腊语和拉丁语字符的混合字符串。我希望给定字符串中的所有字符都转换为此字符串

输出 = 0022039303B903CE03C103B303BF002003B103BD002003C303C403B503AF03BB03B503B903C2002003B103C503C403CC002003B103BA03C103B903B203CE003C02

如何将输入转换为这种输出?

4

2 回答 2

6

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

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

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

于 2013-01-03T15:12:18.547 回答
3

你试过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) 解码:字符串'Γιώργοανστείλειςαυτόακριβώς'(长度=54)

于 2013-01-03T13:22:35.163 回答