Utf-8编码不适用于使用PHP5.5的Utf-8编码文档

Utf-8编码不适用于使用PHP5.5的Utf-8编码文档,php,encoding,utf-8,character-encoding,Php,Encoding,Utf 8,Character Encoding,我正在经历一种非常奇怪的编码问题,我以前从未真正理解过。我在Ubuntu机器上使用PHP5.5只是为了获取信息 解决问题 我有一个简单的index.php文件,我想在其中打印这个简单的字符串 <?php echo "übermotivierter"; ?> 这就像预期的一样 为了以正确的方式显示,我已经完成了以下步骤 将我的IDE Zend Studio的编码更改为UTF-8并再次保存该文件 设置适当的html元标记 <meta http-equiv="Content-Ty

我正在经历一种非常奇怪的编码问题,我以前从未真正理解过。我在Ubuntu机器上使用PHP5.5只是为了获取信息

解决问题

我有一个简单的index.php文件,我想在其中打印这个简单的字符串

<?php echo "übermotivierter";  ?>
这就像预期的一样

为了以正确的方式显示,我已经完成了以下步骤

将我的IDE Zend Studio的编码更改为UTF-8并再次保存该文件 设置适当的html元标记

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
设置适当的php头

<?php header("Content-Type: text/html; charset=utf-8"); ?>
在做了这件事之后,我本以为它会以正确的方式显示出来,但我仍然感到奇怪� 在输出中

解决办法

为了使这个东西正确显示,我必须这样做

<?php echo utf8_encode("übermotivierter");  ?>
现在它以正确的方式显示

我的问题


我真的不明白为什么我必须使用utf8_编码,而我的文档已经编码并保存在utf-8中。那对我来说毫无意义。对此有什么解释吗?

不是答案,但太长了,无法发表评论:

你能试试吗

<?php
$s = "übermotivierter";
echo '<p>', $s, '</p><p>';
for($i=0; $i<strlen($s); $i++) {
    printf('%02x ', ord($s[$i]));
}
echo '</p>';
在你曾经去过的地方?
它的输出是什么?

对于Git 2.18+2018年第二季度,您可能不需要任何第三方技巧将回购内容转换为UTF-8,因为新的签出编码属性可以要求Git在签出到工作树时将内容转换为指定的编码,而在签入时则相反

参见2018年4月15日、2018年3月9日和2018年2月15日。 于2018年5月8日合并

转换:添加“工作树编码”属性 Git识别使用ASCII或其超集之一编码的文件,例如。 UTF-8或ISO-8859-1作为文本文件。 所有其他编码通常被解释为二进制编码,因此内置的Git文本处理工具(例如“Git diff”)以及大多数Git web前端不会可视化内容

添加一个属性,告诉Git用户为 给定文件。如果内容被添加到索引中,那么Git将重新编码 将内容转换为规范的UTF-8表示形式。结帐时Git将 反转此操作

如果存在任何问题,您现在必须为使用“working tree encoding”属性重新编码的内容启用跟踪。 这对于调试编码问题很有用

现在,报告提到:

请注意,使用工作树编码属性可能会导致 陷阱数量:

可供选择的Git实现,例如JGit或libgit2以及更早的Git 截至2018年3月的版本不支持工作树编码 属性 如果决定在存储库中使用working tree encoding属性,则强烈建议确保使用存储库的所有客户端都支持该属性

例如,Microsoft Visual Studio资源文件*.rc或 PowerShell脚本文件*.ps1有时以UTF-16编码。 如果将*.ps1声明为UTF-16文件,并添加启用工作树编码的Git客户端的foo.ps1,则foo.ps1将在内部存储为UTF-8。 不支持工作树编码的客户端将把foo.ps1作为UTF-8编码文件签出。这通常会给该文件的用户带来麻烦

如果不支持工作树编码属性的Git客户机添加了一个新文件bar.ps1,则bar.ps1将在本例中按内部原样存储,可能为UTF-16。 具有工作树编码支持的客户端将把内部内容解释为UTF-8,并在签出时尝试将其转换为UTF-16。该操作将失败并导致错误

重新编码内容需要的资源可能会减慢某些Git操作,例如“Git签出”或“Git添加”

仅当无法存储文件时,才使用“工作树编码”属性 在UTF-8编码中,如果您希望Git能够处理内容 作为文本

例如,如果您的“*.ps1”文件 用字节顺序标记BOM编码的UTF-16,您希望Git执行 根据您的平台自动换行

*.ps1     text working-tree-encoding=UTF-16
如果“*.ps1”文件是UTF-16小文件,请使用以下属性 endian编码没有BOM表,您希望Git使用Windows行结尾 在工作目录中。 请注意,如果使用工作树编码属性来避免歧义,强烈建议使用eol明确定义行尾

*.ps1 text working-tree-encoding=UTF-16LE eol=CRLF

�bermotivierter fc 62 65 72 6d 6f 74 69 76 69 65 72 74 65 72那么我怀疑您是否成功地将文件的编码转换为utf-8;它仍然是iso-8859-1-但是IDE设置为UTf-8。它是否与GIT签出相关?
*.ps1 text working-tree-encoding=UTF-16LE eol=CRLF