2015-09-30 2 views
5

В PHP у меня есть следующий код:PHP: Функция Chr Проблема со специальными символами

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

И я получаю следующий результат:

€ 
128 
� 

Почему не может CHR функция предоставить мне € знак? Как я могу получить €? Мне действительно нужно, чтобы это работало. Заранее спасибо.

+0

мне нужен фактический € знак внутри строки. – BisaZ

+0

работал отлично. –

+0

Что такое файл, сохраненный как, UTF-8 (с/без спецификации)? может быть проблемой. Сохраните его как ANSI, и все 3 эха будут отображаться правильно. –

ответ

4

chr и ord только работают с одиночными байтами символов ASCII. Более конкретно, ord смотрит только на первый байт своего параметра.

Знак евро является три байта символов в UTF-8: 0xE2 0x82 0xAC, так ord("€") (с символом UTF-8) возвращает 226 (0xE2)

Для символов, которые также присутствуют в ISO-8859- 1 (latin1), вы можете использовать utf8_encode() и utf8_decode(), но, к сожалению, знак € не содержится там, поэтому utf8_decode('€') вернет «?» и не может быть преобразован обратно.

TL; DR: Вы не можете использовать ord и chr с кодированием многобайтного как UTF-8

Смежные вопросы