3

PHPのWebDAV 実装に取り​​組んでいます。Windows と他のオペレーティング システムの連携を容易にするために、いくつかの文字エンコーディング フープを通過する必要があります。

Windows は HTTP 要求で ISO-8859-1 を使用しますが、他のほとんどのクライアントは ascii を超えるものを UTF-8 としてエンコードします。

私の最初のアプローチは、これを完全に無視することでしたが、URL を返すときにすぐに問題に遭遇しました。次に、すべての 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」+¨(分音記号)として格納します。ノーマライザーはそれを処理できます。ノーマライザーがない場合は、iconv('UTF8-MAC', 'UTF8', $str)

于 2010-03-26T12:20:31.763 に答える
1

私は自分の質問に答えるのが嫌いですが、ここに行きます。

気にしないで終わりました。さまざまなオペレーティング システムがどのようにエンコードし、エンコーディングを処理するかについて広範な調査を行いました。ほとんどの場合、他の正規化形式を使用する他の os のハンドル パスは問題ないことがわかります。Windows の動作は少しおかしかったですが、動作します。

実際にはまったく utf8 ではないパスを受け取るたびに、エンコーディングを検出して UTF-8 に変換しようとします。

于 2010-08-22T11:35:11.093 に答える