2015-09-30 19 views
5

W PHP Mam następujący kod:PHP: CHR Issue Funkcja znaków specjalnych

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

i pojawia się następujący komunikat:

€ 
128 
� 

Dlaczego nie może funkcja chr zapewnić mi Znak €? Jak mogę dostać €? Naprawdę potrzebuję tego do działania. Z góry dziękuję.

+0

muszę rzeczywistej € znak wewnątrz łańcucha. – BisaZ

+0

działało dobrze dla mnie. –

+0

jaki jest plik zapisany jako, UTF-8 (z/bez BOM)? może być problem. Zapisz go jako ANSI i wszystkie 3 echa będą wyświetlane poprawnie. –

Odpowiedz

4

chr i ord działają tylko z jednobajtowymi znakami ASCII. Dokładniej: ord analizuje tylko pierwszy bajt swojego parametru.

Znak Euro to postać trzech bajtów w UTF-8: 0xE2 0x82 0xAC, więc ord("€") (z UTF-8 symbolu) zwraca 226 (0xE2)

przypadku znaków, które są również obecne w ISO-8859- 1 zestaw znaków (latin1), możesz użyć utf8_encode() i utf8_decode(), ale niestety znak € nie jest tam zawarty, więc utf8_decode('€') zwróci "?" i nie można go przekonwertować z powrotem.

TL; DR: Nie można używać ord i chr z wielo-bajtowego kodowania UTF-8 jak

Powiązane problemy