пробуя код ниже:
<?php
echo "ORD ~ = ".ord("~");
Основываясь на расширенной таблице ASCII -> http://www.ascii-code.com/ выход
ORD ~ = 126
Это правильно, но затем при выводе чего-либо в расширенную таблицу ASCII, например Ø:
<?php
echo "ORD Ø = ".ord("Ø");
дает:
ORD Ø = 195
В то время как в связанной расширенной таблице ASCII правильный код для «Ø» равен 216. То же самое происходит, например, за √ (ога ( «√») выходы 226
в то время как правильный расширенный символ ASCII для 226 â и √ даже нет в таблице).
Поэтому мой вопрос таков: строки PHP в основном представляют собой массив строк ($ str [0] для первого символа, $ str [1] для второго, C-подобный и т. Д.), А PHP не иметь голец типа, как PHP обрабатывает 1-байтовый символ, когда он обрабатывает его отдельно, например используя предыдущую функцию ord () и функции pack () и unpack ()?
PHP char не подписан или они подписаны? Какая разница?
Как я должен интерпретировать эту фразу A string is series of characters, where a character is the same as a byte. This means that PHP only supports a 256-character set
взяты из руководства по PHP?
256-character
это означает, что он поддерживает расширенный ASCII? Но почему тогда эти различия при вызове ord () для расширенных символов ASCII?
Спасибо за внимание!
Ядро PHP в его нынешнем виде не имеет понятия о кодировке символов. Строки — это просто — как ручные состояния — серии байтов (8-битные без знака). Как выходной носитель интерпретирует эти байты … за пределами php.
В вашем примере символ Ø может быть закодирован в формате utf-8, т. Е. Как два байта 195 и 152.
PHP, который не знает о кодировке, обрабатывает эти два байта как два отдельных однобайтовых «символа». ord()
учитывает только первый «символ» в строке, и вы получите 195
,
Таким образом, ответ: без знака, без кодировки вообще … только байты с указателем длины.
Других решений пока нет …