3

我正在为 PHP 开发 WebDAV 实现。为了使 Windows 和其他操作系统更容易协同工作,我需要跳过一些字符编码环。

Windows 在其 HTTP 请求中使用 ISO-8859-1,而大多数其他客户端将 ascii 以外的任何内容编码为 UTF-8。

我的第一种方法是完全忽略这一点,但在返回 url 时我很快遇到了问题。然后我认为最好将所有网址标准化。

以ü为例。这将由 OS/X 通过网络发送为

u%CC%88 (this is codepoint U+0308)

Windows 将其发送为:

%FC (latin1)

但是,在 %FC 上执行 utf8_encode,我得到:

%C3%BC (this is codepoint U+00FC)

我应该将 %C3%BC 和 u%CC%88 视为同一件事吗?如果是这样..如何?不触摸它似乎适用于 Windows。它以某种方式理解它是一个 unicode 字符,但是更新同一个文件会引发错误(没有特殊原因)。

我很乐意提供更多信息。

4

2 回答 2

1

Mac 将 unicode 字符存储为“分解”,即“u”+¨(分音符号)而不是“ü”。Normalizer可以解决这个问题。如果您没有 Normalizer,请尝试iconv('UTF8-MAC', 'UTF8', $str)

于 2010-03-26T12:20:31.763 回答
1

我讨厌回答我自己的问题,但是就这样吧。

我最终没有打扰。对各种操作系统如何编码和处理编码进行了广泛的研究。事实证明,在大多数情况下,其他操作系统的句柄路径都使用其他规范化形式。Windows 工作虽然有点糟糕,但它的工作原理。

每当我收到一条实际上完全不是 utf8 的路径时,我都会尝试检测编码并将其转换为 UTF-8。

于 2010-08-22T11:35:11.093 回答