PHP-строки являются просто байтовыми последовательностями.Они не имеют никакого значения сами по себе.И они также не используют какую-либо конкретную кодировку символов.
Так что, если вы читаете файл, используя file_get_contents()
, вы получите бинарно-безопасное представление файла.Может ли это быть (двоичное) представление изображения или текстового файла, читаемого человеком - PHP не волнует.
Теперь, пока вам нужно просто выполнить базовую обработку строки, вам не нужнонужно знать кодировку символов вообще.Так что если вы хотите сохранить строку обратно в файл, используя file_put_contents()
или хотите получить ее длину ( не количество символов ), используя strlen()
Вы в порядке.
Однако, как только вы начнете выполнять более сложные манипуляции со строками, вам нужно будет знать кодировку !Нет способа сохранить его как часть строки, поэтому вы должны либо отслеживать его отдельно, либо, что делает большинство людей, использовать соглашение о наличии всех (текстовых) строк в общей кодировке символов, такой как US-ASCII или в настоящее время UTF-8 .
Так как невозможно установить кодировку символов для строки, PHP не знает, какой кодировкой строки используется .В связи с этим единственное, что нужно сделать для strlen()
, - это вернуть количество байтов, поскольку это единственное, что PHP знает наверняка.
Если вы предоставите дополнительную информацию об используемой кодировке символов, вам нужно использовать другую функцию - в этом случае она называется mb_strlen()
.
То же относится и к preg_replace()
: если вы хотите заменитьumlaut-a или соответствует трем одинаковым символам подряд, вам необходимо знать, как кодируется umlaut-a, и вообще как кодируются символы.
Так что если у вас есть гипотетическая кодировка символов, которая кодируетстрочные буквы a
как a1
и прописные буквы A
как a2
, b
как b1
и B
как b2
(и т. д.), вы можете иметь(закодированная) строка a1a1a1
, которая состоит из трех одинаковых символов в строке.Однако, не зная кодировку и просто взглянув на последовательность байтов, невозможно обнаружить это.
Сводка:
Нет нормального «по умолчанию», поскольку строки PHP не содержаткодировка символов.И даже если одна функция, такая как strlen()
, не может вернуть длину последовательности байтов, как требуется для Content-Length
HTTP-заголовка и в то же время количество символов, которое полезно для обозначения длиныстатья в блоге.
Вот почему Функция перегрузки функции изначально не работает, и даже если поначалу она выглядит красиво, она будет плохо отлаживаться.