[PHP] Как задать Unicode-символ в строке?

sbs-66

В очередной раз убедился в убогости PHP. Есть такая задача - надо задать в исходниках переменную, содержащую символ U+FFFC. Кодировка исходников UTF-8.
В нормальных языках это делается так '\uFFFC'. Однако PHP такого синтаксиса не знает. Можно конечно записать сам символ как последовательность байт, но большинство редакторов будет его игнорировать или заменять на другой символ.
Пока не придума ничего лучше, как записать "x\FFx\FC", перекодировать это из кодировки исходников (UTF-8) в ISO-8859-1, а полученную строку перекодировать из UTF-16BE в UTF-8. Но такой код даже писать чтоб проверить не хочется.
Может есть способ попроще?

uncle17

а chr(0xFFFC) не?

Dasar

может есть какого-нибудь charFromInteger(0xFFFC)?

sbs-66

chr(0xFFFC)
А chr умеет работать с Unicode разве? Проблема вроде ровно в том, что PHP не поддерживает нативно Unicode.

uncle17

http://php.net/chr
chr with unicode support
<?php
function uchr ($codes) {
    if (is_scalar($codes $codes= func_get_args;
    $str= '';
    foreach ($codes as $code) $str.= html_entity_decode('&#'.$code.';',ENT_NOQUOTES,'UTF-8');
    return $str;
}
echo uchr(23383); echo '<br/>';
echo uchr(23383,215,23383); echo '<br/>';
echo uchr(array(23383,215,23383,215,23383; echo '<br/>';
?>
и там еще есть примеры

sbs-66

chr
$c = chr(0xFFFC);
print ord( $c );

Выдаёт 252

sbs-66

жесть!

kruzer25

надо задать в исходниках переменную, содержащую символ U+FFFC
Ну и говоришь $var = "*", где * - символ FFCC. Какая разница, какой язык-то?

Andbar

Ну и говоришь $var = "*", где * - символ FFCC. Какая разница, какой язык-то?
Можно конечно записать сам символ как последовательность байт, но большинство редакторов будет его игнорировать или заменять на другой символ.

kruzer25

Ну тогда $var = chr(0xff).chr(0xcc)?

sbs-66

Ты стандарт юникода читал? U+FFFC в UTF-8 записывается не меньше чем тремя байтам, и они совсем не \xFF\xFC. А забивать в код никому непонятные байты, которые неочевидно как в код символа переводить - моветон.

kruzer25

Ты стандарт юникода читал?
Похоже, непрочтённым мной оказался первый пост треда...

artimon

В PHP (как мининмум до шестой версии) нет понятия «кодировка исходного текста». Поэтому то что ты хочешь невозможно обеспечить нормальным способом.
Более того, из-за этого нельзя писать исходники в UTF-16, например.

ppplva

Странно, кодировка есть, а понятия нет :) Даже если пыхпых не разбирается в кодировках, автор программы о них знает, и может подобрать нужную последовательность байт.

artimon

автор программы о них знает, и может подобрать нужную последовательность байт
Ну, так ровно этого автор и не хочет делать. Т.е. он хочет написать что-то типа "\uFFFC", а PHP должен сам узнать, что исходник у нас в UTF-8 и преобразовать это в три байта "\xEF\xBF\xBC". Но для этого PHP должен знать в какой кодировке у него исходный текст (или в какую кодировку переводить такие последовательности).

ppplva

Понятно. Так, видимо, не получится.
Оставить комментарий
Имя или ник:
Комментарий: