5

PHP で vcard を作成しようとすると、文字エンコードの問題が発生します。

Outlook では、"é" が "é" になるなど、特殊文字を使用する名前が歪んで表示されます。

Windows 文字エンコーディング用にヘッダーと FN および N セクションを更新しましたが、問題は残ります。

提案に感謝します。

Vカードの抜粋:

BEGIN:VCARD
VERSION:3.0
REV:2013-03-27 19:37:46
FN;CHARSET=Windows-1252:Namé S. Nameé
N;CHARSET=Windows-1252:Namé;Namé;;;
TITLE:Associate
ORG:Company
EMAIL;TYPE=internet,pref:name@abc.com
TZ:-0400
END:VCARD

Vcard の PHP ヘッダー:

    header("Content-type: text/x-vcard; charset=windows-1252;");
    header("Content-Length: ".strlen($vc->card));
    header("Content-Disposition: attachment; filename=".$vcard_name.".vcf");
    header("Pragma: public");
4

2 に答える 2

4

あなたの解決策は私にとってはうまくいきませんでした.私はまだWindowsで面白いキャラクターを持っています.

私にとってうまくいったのは、代わりに ISO-8859-1 を使用することでした。PHP でutf8-decode()を使用して UTF8 を ISO-8859-1 に変換できますENCODING=iso-8859-1。Vcard で関連フィールドを使用することで、私がテストしたほとんどの UTF-8 ベースのクライアントで動作します。

ヘッダ:

Content-Type: text/x-vcard; charset=iso-8859-1

Vcard の例:

N;CHARSET=iso-8859-1:Göteborg

Windows、OS X、IOS、Android でテスト済み。

于 2014-02-02T22:17:28.843 に答える
3

同様の質問がいくつかありましたが、これについて決定的なものはありませんでした。vcard フィールドに charset を指定することで、途中まで行ったように見えます。

以下を「utf-8;」に変更することで、最終的に機能するようになりました。

 header("Content-type: text/x-vcard; charset=CHARSET=utf-8;");

同じことが、vcard 自体の名前フィールドにも当てはまります。utf-8 を指定すると、特殊文字の表示の問題が解決されたようです。

$this->card .= "FN;CHARSET=utf-8:".$new_display_name.$this->data['short_mode'];
    $this->card .= "N;CHARSET=utf-8:"

Outlook 2007 で開くと、すべてのアクセント文字が意図したとおりに表示されます。

于 2013-03-28T05:40:18.700 に答える