1

現在、ユーザーが他の人にメールでカードを送ることができるeカードシステムを完成させています。

メールには、ブラウザで同じカードを表示するためのリンクも含まれています。このリンクは、基本的に、テキストを次のようにエンコードすることによって生成されます。base64_encode()

'http://www.test.com/ecards?card=' . base64_encode('your text'); // like this

これは英語のテキストでは問題なく機能しますが、中国語を入力してリンクにアクセスすると、文字がすべて台無しになります

汉��N�B��Y][ۘ[�[�\�N�9�(�*���B�[�Z[��0��q��B��[\Y�YY�[�\�N�9cc�+�N�B��Y][ۘ[�[�\�N�:#��*���B��[�\�N�9.+y���

文字セットとは何の関係もありません。UTF-8に設定されており、同じ中国語のテキストを印刷しても、完全に表示されます。

だから私はこれと何か関係があるのだろうかbase64_encode()と思っbase64_decode()ています。

// Doesn't work
echo base64_decode($body);

// Chinese characters show up fine!!!!
echo 'simplified Chinese: 汉语; <br />';
echo 'traditional Chinese: 漢語; <br />';
echo 'Pinyin: Hànyǔ; <br />';
echo 'simplified Chinese: 华语; <br />';
echo 'traditional Chinese: 華語; <br />';
echo 'Chinese: 中文; <br />';

編集: http: //www.test.com/ecards?card =中文のようなURLを使用して、$ _ GET []を出力しようとすると、正常に機能します。つまり、それは明らかに漢字を処理できないbase64_encodeまたはです。base64_decode

4

1 に答える 1

4

関数は文字では動作せず、base64_バイトで動作します。彼らはあなたが渡したものをエラーなしで喜んで変換します。

ここでの問題は、入力として使用している文字のエンコードが、デコード後に表示されるページのエンコードと一致しないことです。「あなたのテキスト」はどこから来たのですか?フォーム送信の場合は、フォームが表示されるページが「ビューカード」ページと同じエンコーディングを使用して表示されていること、またはフォームにaccept-charset「ビューカード」ページのエンコーディングと一致する属性があることを確認する必要があります。 。

于 2012-10-04T08:55:28.963 に答える