【问题标题】:PHP, convert string into UTF-8 and then hexadecimalPHP,将字符串转换为 UTF-8 然后十六进制
【发布时间】:2015-03-06 21:34:20
【问题描述】:

在 PHP 中,我想将包含非 ASCII 字符的字符串转换为十六进制数字序列,表示这些字符的 UTF-8 编码。例如,鉴于此:

$text = 'ąćę';

我需要制作这个:

C4=84=C4=87=C4=99

我该怎么做?

【问题讨论】:

  • 这些数字到底是多少?你最终和他们一起做什么?你可以在它们上使用json_encode,但你不会得到你提到的值。
  • 我拿出了一些不相关的文字,按照我的理解阐明了你的最终目标,并明确表示所涉及的字符串只是一个例子。现在,我们需要您提供更多信息才能回答这个问题。 1:这是quoted-printable encoding 你要去吗? 2:第一个C4之前应该有一个等号,是吗? 3:ASCII字符应该怎么处理? (例如,如果字符串是'ącę',那么应该是=C4=84=63=C4=99,还是=C4=84c=C4=99?)
  • @mkaatman 我没有检查,但我 99% 确定 C4 84 C4 87 C4 99 是字符序列 ąćę 的 UTF-8 编码中每个字节的十六进制表示(即 U+0105 U+0107 U+0119)。 =XX 符号在我看来很像 MIME quoted-printable 编码。
  • 我认为84 实际上应该是85;您可以对文本进行 URL 编码以快速检查。

标签: php unicode utf-8 type-conversion vcf-vcard


【解决方案1】:

在编写您的问题时,假设您的文本一开始是正确的 UTF-8 编码,这应该可以工作:

$text = 'ąćę';
$result = implode('=', str_split(strtoupper(bin2hex($text)), 2));

如果您的文本不是 UTF-8,而是其他一些编码,那么您可以使用

$utf8 = mb_convert_encoding($text, 'UTF-8', $yourEncoding);

将其转换为 UTF-8,其中 $yourEncoding 是其他一些字符编码,例如 'ISO-8859-1'

这是可行的,因为在 PHP 中,字符串只是字节数组。因此,只要您的文本一开始就被正确编码,您就不必做任何特殊的事情来将其视为字节。实际上,此代码无需修改即可适用于您想要的任何字符编码。

现在,如果您想做引用打印,那就是另一回事了。您可以尝试使用函数quoted_printable_encode(需要 PHP 5.3 或更高版本)。

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 2010-11-16
    • 2015-04-28
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多