2015-09-30 16 views
5

とChr関数の問題、私は次のコードを持っている:PHP:PHPに特殊文字

<?php 
    echo "€<br>"; 
    echo ord("€") . "<br>"; 
    echo chr(128) . "<br>"; 

を、私は次の出力を得る:

€ 
128 
� 

なぜChr関数は私を提供することはできませんが€印?どのように私は€を得ることができますか?私は本当にこれが働くことが必要です。前もって感謝します。

+0

のようなマルチバイトエンコーディングでordchrを使用することはできません。 – BisaZ

+0

私のためにうまく働いた。 –

+0

UTF-8(BOM付き/なし)で保存されたファイルは何ですか?問題になる可能性があります。 ANSIとして保存し、3つのエコーすべてが正しく表示されます。 –

答えて

4

chrおよびordは、1バイトのASCII文字でのみ機能します。より具体的には、ordはそのパラメータの最初のバイトのみを調べます。

ユーロ記号は、UTF-8で3バイト文字である:そうord("€")0xE2 0x82 0xAC(UTF-8符号付き)にも存在する文字について226(0xE2)

を返すISO-8859- 1(latin1)文字セットの場合、utf8_encode()utf8_decode()を使用できますが、残念ながらユーロ記号は含まれていないため、utf8_decode('€')は "?"を返します。元に戻すことはできません。

TL; DR:あなたが、私は、文字列内の実際€記号を必要とUTF-8