utf 8 — PHP: ошибка функции chr со специальными символами

В PHP у меня есть следующий код:

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

И я получаю следующий вывод:

€
128
�

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

5

Решение

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

4

Другие решения

Других решений пока нет …