Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不同的utf8编码?_Php_Utf 8_Character Encoding - Fatal编程技术网

Php 不同的utf8编码?

Php 不同的utf8编码?,php,utf-8,character-encoding,Php,Utf 8,Character Encoding,我对utf8编码有一个小问题。 我试图编码的单词是“kühl”。 所以它有一个特殊的特点 当我在第一个文件中用utf8编码这个字符串时,我得到: kühl 当我在第二个文件中用utf8编码这个字符串时,我得到: 库Ì�hl 使用php utf8_encode()时,我总是将第一个(kühl)作为输出,但我需要第二个作为输出(kuÌ)�hl) mb_detect_编码告诉我这两种编码都是“UTF-8”,所以这并没有真正的帮助 你有没有办法把第二个作为输出? 提前谢谢 utf8_encode,不

我对utf8编码有一个小问题。 我试图编码的单词是“kühl”。 所以它有一个特殊的特点

当我在第一个文件中用utf8编码这个字符串时,我得到:

kühl

当我在第二个文件中用utf8编码这个字符串时,我得到:

库Ì�hl

使用php utf8_encode()时,我总是将第一个(kühl)作为输出,但我需要第二个作为输出(kuÌ)�hl)

mb_detect_编码告诉我这两种编码都是“UTF-8”,所以这并没有真正的帮助

你有没有办法把第二个作为输出?
提前谢谢

utf8_encode,不管它的名字是什么,都不会神奇地编码成UTF-8

只有当您的源代码是ISO-8559-1(也称为拉丁语-1)时,它才会起作用


如果您的源已经是UTF-8或任何其他编码,它将输出断开的数据。

utf8\U编码,不管它的名称如何,都不会神奇地编码为UTF-8

只有当您的源代码是ISO-8559-1(也称为拉丁语-1)时,它才会起作用


如果您的源已经是UTF-8或任何其他编码,它将输出中断的数据。

只有一种称为UTF-8的编码,但有多种方法可以用Unicode表示某些标志符号。是拉丁语-1兼容性单字形预合成的ü,在拉丁语-1中显示为kühl,而在我的头顶上显示为kuÌ�hl看起来像是同一个字符的完全分解表达式,即(u)后跟(组合分离)。另见

0x88在Latin-1中不是有效字符,因此(在我的浏览器中)它显示为“无效字符”占位符(黑色菱形中带有白色问号),而其他人可能会看到其他内容,或者根本看不到任何内容

显然,您可以使用PHP在这两种表单之间进行转换:

$normalized = Normalizer::normalize($input, Normalizer::FORM_D);

顺便说一句,将UTF8视为拉丁语-1,并将其复制/粘贴为实际的真实文本,这充其量是反复无常的。如果您有字符编码问题,那么实际字节(例如十六进制)是唯一可移植的、可理解的方式来表达您所拥有的内容。在许多情况下,计算机如何呈现它是不可预测的,尤其是当编码有问题或未知时。我一直坚持您在问题中使用的演示文稿,但是如果您还有其他问题,请注意清楚地阐明问题。

只有一种称为UTF-8的编码,但有多种方法可以用Unicode表示某些字形。是拉丁语-1兼容性单字形预合成的ü,在拉丁语-1中显示为kühl,而在我的头顶上显示为kuÌ�hl看起来像是同一个字符的完全分解表达式,即(u)后跟(组合分离)。另见

0x88在Latin-1中不是有效字符,因此(在我的浏览器中)它显示为“无效字符”占位符(黑色菱形中带有白色问号),而其他人可能会看到其他内容,或者根本看不到任何内容

显然,您可以使用PHP在这两种表单之间进行转换:

$normalized = Normalizer::normalize($input, Normalizer::FORM_D);

顺便说一句,将UTF8视为拉丁语-1,并将其复制/粘贴为实际的真实文本,这充其量是反复无常的。如果您有字符编码问题,那么实际字节(例如十六进制)是唯一可移植的、可理解的方式来表达您所拥有的内容。在许多情况下,计算机如何呈现它是不可预测的,尤其是当编码有问题或未知时。我坚持使用您在问题中使用的演示文稿,但如果您还有其他问题,请注意清楚地阐明问题。

当我在记事本++中选中kühl并选择UTF-8时,可以。第二个似乎很奇怪。你知道第二个可能是什么吗?我不明白为什么mb_detect_编码告诉我这也是UTF-8。我假设您的脚本文件是使用不同的字符编码保存的–因此,在这两种情况下,您实际上不是用UTF8编码相同的字节序列,而是不同的字节序列。我也这么认为,但这不是问题所在。知道第二个可能是哪种编码吗?在“kuÌ”中�“hl”,我看到一个U+00CC“带坟墓的拉丁文大写字母I”,后跟一个U+FFFD“替换字符”;后者看起来像黑钻石上的白色问号。无论字符串中有什么数据,其中一些数据在进入我的浏览器的过程中丢失了。当我在记事本++中选中kühl并选择UTF-8时,一切正常。第二个似乎很奇怪。你知道第二个可能是什么吗?我不明白为什么mb_detect_编码告诉我这也是UTF-8。我假设您的脚本文件是使用不同的字符编码保存的–因此,在这两种情况下,您实际上不是用UTF8编码相同的字节序列,而是不同的字节序列。我也这么认为,但这不是问题所在。知道第二个可能是哪种编码吗?在“kuÌ”中�“hl”,我看到一个U+00CC“带坟墓的拉丁文大写字母I”,后跟一个U+FFFD“替换字符”;后者看起来像黑钻石上的白色问号。无论您的字符串中有什么数据,其中一些数据都在我的浏览器中丢失了。我希望对反向输入UTF-8到
iconv
并告诉它将拉丁语-1转换为UTF-8以查看我的UTF-8终端中的“拉丁语-1”表示法进行表决。如果我错了,请纠正我,但这是NFC对NFD的问题吗?虽然这个答案非常具有描述性,但它并没有真正回答OP提出的问题,即如何在NFD中获得它。@Phil_1984_感谢您指出这一点!添加了一个PHP代码片段来实现这一点。我希望支持将UTF-8馈送到
iconv
并告诉它将拉丁语-1转换为UTF-8的反向方法,以便在我的UTF-8终端中看到“拉丁语-1”表示。如果我错了,请纠正我,但这是NFC与NFD的问题吗?虽然这个答案非常具有描述性,但它并没有真正回答OP提出的问题,即如何在NFD中获得它。@Phil_1984_感谢您指出这一点!为此添加了一段PHP代码。