Как в php перенести на новую строку
Перейти к содержимому

Как в php перенести на новую строку

  • автор:

Строки

Если строка заключена в двойные кавычки («), PHP распознает большее количество управляющих последовательностей для специальных символов:

Управляющие последовательности

Последовательность Значение
\n новая строка (LF или 0x0A (10) в ASCII)
\r возврат каретки (CR или 0x0D (13) в ASCII)
\t горизонтальная табуляция (HT или 0x09 (9) в ASCII)
\v вертикальная табуляция (VT или 0x0B (11) в ASCII) (с версии PHP 5.2.5)
\e escape-знак (ESC или 0x1B (27) в ASCII) (с версии PHP 5.4.4)
\f подача страницы (FF или 0x0C (12) в ASCII) (с версии PHP 5.2.5)
\\ обратная косая черта
\$ знак доллара
двойная кавычка
\[0-7] последовательность символов, соответствующая регулярному выражению символа в восьмеричной системе счисления
\x[0-9A-Fa-f] последовательность символов, соответствующая регулярному выражению символа в шестнадцатеричной системе счисления

Манипулирование строками

Для работы со строками в PHP существует целый ряд специализированных функций.

Форматирование строк

В PHP есть две функции, позволяющие отформатировать данные перед выводом:

  • printf() — выводит отформатированную строку в окно браузера;
  • sprintf() — выводит отформатированную строку в переменную.
    Далее можно использовать для записи в файл с помощью функции fputs().

Этим функциям передаются строка управления форматом и сами форматируемые данные. Строка управления форматом включает в себя обычные символы, которые прямо копируются в результат, и определители преобразования. Каждый определитель преобразования начинается с символа процента (%) и включает следующие элементы:

  • указатель заполнения используется, если необходимо увеличить размер строки. По умолчанию выполняется заполнение пробелами. Можно указать и 0. Перед любым другим символом заполнения надо поставить одинарную кавычку (). Необязательный параметр;
  • указатель выравнивания, заданный знаком минус (), определяет выравнивание влево. По умолчанию выполняется выравнивание вправо. Необязательный параметр;
  • указатель ширины задает количество символов, которое должно содержаться в выводимых данных. Необязательный параметр;
  • указатель точности задает количество десятичных знаков, отображаемых для чисел с плавающей запятой. Необязательный параметр;
  • указатель типа задает тип, в соответствии с которым следует обрабатывать выводимые данные. Возможные значения:
    d десятичное число
    b двоичное число
    c ASCII-эквивалент
    f число с плавающей точкой двойной точности
    o восьмеричное число
    s строка
    x шестнадцатеричное число в нижнем регистре
    X шестнадцатеричное число в верхнем регистре
Пример 1

Анализ строк

PHP содержит множество функций, дающих информацию о строках. Наиболее употребимыми являются:

  • strlen() — определяет длину строки.
  • strstr() — определяет наличие подстроки в строке. Аргументы: исходная строка и искомая подстрока. Если такой подстроки в строке нет, функция возвращает false. Если подстрока в строке есть, функция возвращает часть исходной строки, которая начинается с искомой подстроки.
  • stristr() — работает так же, как и strstr(), но не различает регистры.
  • strpos() — определяет позицию подстроки в строке. Аргументы: исходная строка и искомая подстрока. Если такой подстроки в строке нет, функция возвращает false. Если подстрока в строке есть, функция возвращает номер символа, с которого начинается подстрока.
  • substr() — возвращает часть строки, ограниченную параметрами. Аргументы: исходная строка, начальная позиция, длина подстроки (необязательно). Если начальная позиция отрицательна, то отсчет идет от конца строки. Если длина не указана, возвращается остаток строки. Если длина отрицательна, то подстрока завершается на указанной позиции от конца строки.

Управление строками

PHP содержит множество функций управления строками. Наиболее употребимыми являются:

  • ltrim(), chop(), trim() — удаляют все разделители соответственно в начале строки, в конце строки, в начале и конце строки. К разделителям относятся следующие символы: «\n» (новая строка), «\r» (возврат каретки), «\t» (табуляция), простой пробел.
  • str_replace() — заменяет все экземпляры указанной подстроки в строке на новую подстроку. Аргументы: заменяемая подстрока, замещающая подстрока, исходная строка. Например:
  • substr_replace() — заменяет часть строки, ограниченную параметрами. Аргументы: исходная строка, замещающая подстрока, начальная позиция, длина заменяемой подстроки (необязательно). Если начальная позиция отрицательна, то отсчет идет от конца строки. Если длина не указана, используется вся длина строки. Если длина отрицательна, то замена завершается на указанной позиции от конца строки. Например:
  • strtoupper() — переводит символы строки в верхний регистр.
  • strtolower() — переводит символы строки в нижний регистр.
  • ucwords() — переводит в верхний регистр первый символ каждого слова.
  • explode() — разбивает строку на массив. Аргументы: строка-разделитель и исходная строка. Например:
  • implode() -объединяет элементы массива со строкой.

Функции работы со строками в PHP

  • addcslashes — Экранирует спецсимволы в стиле языка C
  • addslashes — Экранирует спецсимволы в строке
  • bin2hex — Преобразует бинарные данные в шестнадцатиричное представление
  • chr — Возвращает символ по его коду
  • chunk_split — Разбивает строку на фрагменты
  • convert_cyr_string — Преобразует строку из одной кириллической кодировки в другую
  • count_chars — Возвращает информацию о символах, входящих в строку
  • crc32 — Вычисляет CRC32 для строки
  • crypt — Необратимое шифрование (хэширование)
  • echo — Выводит одну или более строк
  • explode — Разбивает строку на подстроки
  • fprintf — Записывает отформатированную строку в поток
  • get_html_translation_table — Возвращает таблицу преобразований
  • hebrev — Преобразует текст на иврите из логической кодировки в визуальную
  • hebrevc — Преобразует текст на иврите из логической кодировки в визуальную с преобразованием перевод
  • htmlentities — Преобразует символы в соответствующие HTML сущности
  • htmlspecialchars — Преобразует специальные символы в HTML сущности
  • html_entity_decode — Преобразует HTML сущности в соответствующие символы
  • implode — Объединяет элементы массива в строку(массив в строку)
  • localeconv — Возвращает информацию о числовых форматах
  • ltrim — Удаляет пробелы из начала строки
  • md5 — Возвращает MD5 хэш строки
  • md5_file — Возвращает MD5 хэш файла
  • metaphone — Возвращает ключ metaphone для строки
  • nl2br — Вставляет HTML код разрыва строки перед каждым переводом строки
  • number_format — Форматирует число с разделением групп
  • ord — Возвращает ASCII код символа
  • parse_str — Разбирает строку в переменные
  • print — Выводит строку
  • printf — Выводит отформатированную строку
  • quoted_printable_decode — Раскодирует строку, закодированную методом quoted printable
  • quotemeta — Экранирует специальные символы
  • rtrim — Удаляет пробелы из конца строки
  • sha1 — Возвращает SHA1 хэш строки
  • sha1_file — Возвращает SHA1 хэш файла
  • similar_text — Вычисляет степень похожести двух строк
  • soundex — Возвращает ключ soundex для строки
  • sprintf — Возвращает отформатированную строку
  • sscanf — Разбирает строку в соответствии с заданным форматом
  • strcasecmp — Сравнение строк без учета регистра, безопасное для данных в двоичной форме
  • strcmp — Сравнение строк, безопасное для данных в двоичной форме
  • strcoll — Сравнение строк с учетом текущей локали
  • strcspn — Возвращает длину участка в начале строки, не соответствующего маске
  • stripcslashes — Удаляет экранирование символов, произведенное функцией addcslashes()
  • stripos — Возвращает позицию первого вхождения подстроки без учета регистра
  • stripslashes — Удаляет экранирование символов, произведенное функцией addslashes()
  • strip_tags — Удаляет HTML и PHP тэги из строки
  • stristr — Аналог функции strstr, но независит от регистра
  • strlen — Возвращает длину строки
  • strnatcasecmp — Сравнение строк без учета регистра с использованием алгоритма
  • strnatcmp — Сравнение строк с использованием алгоритма «естественного упорядочения»
  • strncasecmp — Сравнение первых n символов строк без учета регистра, безопасное для данных в двоичной форме
  • strncmp — Сравнение первых n символов строк без учета регистра, безопасное для данных в двоичной форме
  • strpos — Находит первое вхождение подстроки в строку
  • strrchr — Находит последнее вхождение символа в строку
  • strrev — Переворачивает строку
  • strripos — Возвращает позицию последнего вхождения подстроки без учета регистра
  • strrpos — Находит последнее вхождение символа в строку
  • strspn — Возвращает длину участка в начале строки, соответствующего маске
  • strstr — Находит первое вхождение подстроки
  • strtok — Разбивает строку
  • strtolower — Преобразует строку в нижний регистр
  • strtoupper — Преобразует строку в верхний регистр
  • strtr — Преобразует заданные символы
  • str_ireplace — Регистро-независимый вариант функции str_replace().
  • str_pad — Дополняет строку другой строкой до заданной длины
  • str_repeat — Возвращает повторяющуюся строку
  • str_replace — Заменяет строку поиска на строку замены
  • str_rot13 — Выполняет над строкой преобразование ROT13
  • str_shuffle — Переставляет символы в строке
  • str_split — Преобразует строку в массив
  • str_word_count — Возвращает информацию о словах, входящих в строку
  • substr — Функция возвращает часть строки
  • substr_count — Подсчитывает число вхождений подстроки в строку
  • substr_replace — Заменяет часть строки
  • trim — Удаляет пробелы из начала и конца строки
  • ucfirst — Преобразует первый символ строки в верхний регистр
  • ucwords — Преобразует в верхний регистр первый символ каждого слова в строке
  • vprintf — Выводит отформатированную строку
  • vsprintf — Возвращает отформатированную строку
  • wordwrap — Выполняет перенос строки на данное количество символов с использованием символа разрыва строки

Особенности операторов сравнения применительно к строкам.

Функция chop( ) возвращает строку после удаления из нее завершающих пропусков и символов новой строки. Синтаксис функции chop( ):

string chop(string строка)

В следующем примере функция chop( ) удаляет лишние символы новой строки:

str_pad()

Функция str_pad( ) выравнивает строку до определенной длины заданными символами и возвращает отформатированную строку. Синтаксис функции str_pad( ):

string str_pad (string строка, int длина_дополнения [, string дополнение [, int тип_дополнения]])

Если необязательный параметр дополнение не указан, строка дополняется пробелами. В противном случае строка дополняется заданными символами. По умолчанию строка дополняется справа; тем не менее, вы можете передать в параметре тип_дополнения константу STR_PAD_RIGHT, STR_PAD_LEFT или STR_PAD_BOTH, что приведет к дополнению строки в заданном направлении. Пример демонстрирует дополнение строки функцией str_pad( ) с параметрами по умолчанию:

В следующем примере используются необязательные параметры функции str_pad( ):

Сравнение двух строк

Сравнение двух строк принадлежит к числу важнейших строковых операций любого языка. Хотя эту задачу можно решить несколькими разными способами, в РНР существуют четыре функции сравнения строк:

  • strcmp()
  • strcasecmp()
  • strspn()
  • strcspn()
strcmp()

Функция strcmp( ) сравнивает две строки с учетом регистра символов. Синтаксис функции strcmp( ): int strcmp (string строка1, string строка2)

После завершения сравнения strcmp( ) возвращает одно из трех возможных значений:

  • 0, если строка1 и строка2 совпадают;
  • < 0, если строка1 меньше, чем строка2;
  • > 0, если строка2 меньше, чем строка1.

В следующем фрагменте сравниваются две одинаковые строки:

strcasecmp()

Функция strcasecmp( ) работает точно так же, как strcmp( ), за одним исключением — регистр символов при сравнении не учитывается. Синтаксис функции strcasecmp( ):

int strcasecmp (string cтpoкa1, string строка2)

В следующем фрагменте сравниваются две одинаковые строки:

strspn()

Функция strspn( ) возвращает длину первого сегмента строки1, содержащего символы, присутствующие в строке2. Синтаксис функции strspn( ):

int strspn (string строка1, string строка2)

Следующий фрагмент показывает, как функция strspn( ) используется для проверки пароля:

strcspn()

Функция strcspn( ) возвращает длину первого сегмента строки1, содержащего символы, отсутствующие в строке2. Синтаксис функции strcspn( ):

int strcspn (string строка1, string строка2)

В следующем фрагменте функция strcspn( ) используется для проверки пароля:

Обработка строковых данных без применения регулярных выражений

При обработке больших объемов информации функции регулярных выражений сильно замедляют выполнение программы. Эти функции следует применять лишь при обработке относительно сложных строк, в которых регулярные выражения действительно необходимы. Если же анализ текста выполняется по относительно простым правилам, можно воспользоваться стандартными функциями РНР, которые заметно ускоряют обработку. Все эти функции описаны ниже.

strtok()

Функция strtok( ) разбивает строку на лексемы по разделителям, заданным вторым параметром. Синтаксис функции strtok( ):

string strtok (string строка, string разделители)

У функции strtok( ) есть одна странность: чтобы полностью разделить строку, функцию необходимо последовательно вызвать несколько раз. При очередном вызове функция выделяет из строки следующую лексему. При этом параметр строка задается всего один раз — функция отслеживает текущую позицию в строке до тех пор, пока строка не будет полностью разобрана на лексемы или не будет задан новый параметр строка. Следующий пример демонстрирует разбиение строки по нескольким разделителям:

parse_str()

Функция parse_str( ) выделяет в строке пары <переменная-значение> и присваивает значения переменных в текущей области видимости. Синтаксис функции parse_str( ):

void parse_str (string строка)

Функция parse_str( ) особенно удобна при обработке URL, содержащих данные форм HTML или другую расширенную информацию. В следующем примере анализируется информация, переданная через URL. Строка представляет собой стандартный способ передачи данных между страницами либо откомпилированных в гиперссылке, либо введенных в форму HTML:

Поскольку эта функция создавалась для работы с URL, она игнорирует символ амперсанд (&).

explode()

Функция explode() делит строку на элементы и возвращает эти элементы в виде массива. Синтаксис функции explode():

array explode (string разделитель, string строка [, int порог])

Разбиение происходит по каждому экземпляру разделителя, причем количество полученных фрагментов может ограничиваться необязательным параметром порог.

Разделение строки функцией explode( ) продемонстрировано в следующем примере:

Функция explode( ) практически идентична функции регулярных выражений POSIX split( ), описанной выше. Главное различие заключается в том, что передача регулярных выражений в параметрах допускается только при вызове split( ).

implode()

Если функция explode( ) разделяет строку на элементы массива, то ее двойник — функция implode( ) — объединяет массив в строку. Синтаксис функции implode( ):

string implode (string разделитель, array фрагменты)

Формирование строки из массива продемонстрировано в следующем примере:

У implode( ) имеется псевдоним — функция join( ).

strpos()

Функция strpos( ) находит в строке первый экземпляр заданной подстроки. Синтаксис функции strpos():

int strpos (string строка, string подстрока [, int смещение])

Необязательный параметр offset задает позицию, с которой должен начинаться поиск. Если подстрока не найдена, strpos() возвращает FALSE (0).

В следующем примере определяется позиция первого вхождения даты в файл журнала:

strrpos()

Функция strrpos( ) находит в строке последний экземпляр заданного символа. Синтаксис функции strrpos( ):

int strpos (string строка, char символ)

По возможностям эта функция уступает своему двойнику — функции strpos( ), поскольку она позволяет искать только отдельный символ, а не всю строку. Если во втором параметре strrpos( ) передается строка, при поиске будет использован только ее первый символ.

str_replace()

Функция str_replace( ) ищет в строке все вхождения заданной подстроки и заменяет их новой подстрокой. Синтаксис функции str_replace( ):

string str_replace (string подстрока, string замена, string строка)

Функция substr_replace( ), описанная ниже в этом разделе, позволяет провести заме ну лишь в определенной части строки. Ниже показано, как функция str_replace( ) используется для проведения глобальной замены в строке.

Если подстрока ни разу не встречается в строке, исходная строка не изменяется:

strstr()

Функция strstr( ) возвращает часть строки, начинающуюся с первого вхождения заданной подстроки. Синтаксис функции strstr( ):

string strstr (string строка, string подстрока)

В следующем примере функция strstr( ) используется для выделения имени домена из URL:

substr()

Функция substr( ) возвращает часть строки, начинающуюся с заданной начальной позиции и имеющую заданную длину. Синтаксис функции substr( ):

string substr (string строка, int начало [, int длина])

Если необязательный параметр длина не указан, считается, что подстрока начинается с заданной начальной позиции и продолжается до конца строки. При использовании этой функции необходимо учитывать четыре обстоятельства:

  • если параметр начало положителен, возвращаемая подстрока начинается с позиции строки с заданным номером;
  • если параметр начало отрицателен, возвращаемая подстрока начинается с позиции (длина строки — начало);
  • если параметр длина положителен, в возвращаемую подстроку включаются все символы от позиции начало до позиции начало+длина. Если последняя величина превышает длину строки, возвращаются символы до конца строки;
  • если параметр длина отрицателен, возвращаемая подстрока заканчивается на заданном расстоянии от конца строки.

Помните о том, что параметр начало определяет смещение от первого символа строки; таким образом, возвращаемая строка в действительности начинается с символа с номером (начало + 1).

Следующий пример демонстрирует выделение части строки функцией substr( ):

Пример с положительным параметром длина:

Пример с отрицательным параметром длина:

substr_count()
substr_replace()

Функция substr_replace( ) заменяет часть строки, которая начинается с заданной позиции. Если задан необязательный параметр длина, заменяется фрагмент заданной длины; в противном случае производится замена по всей длине заменяющей строки. Синтаксис функции substr_replace( ):

string substr_replace (string строка, string замена, int начало [, int длина])

Параметры начало и длина задаются по определенным правилам:

  • если параметр начало положителен, замена начинается с заданной позиции;
  • если параметр начало отрицателен, замена начинается с позиции (длина строки -начало);
  • если параметр длина положителен, заменяется фрагмент заданной длины;
  • если параметр длина отрицателен, замена завершается в позиции (длина строки -длина).

Простая замена текста функцией substr_replace( ) продемонстрирована в следующем примере:

Преобразование строк и файлов к формату HTML и наоборот

Преобразовать строку или целый файл к формату, подходящему для просмотра в web-браузере (или наоборот), проще, чем может показаться на первый взгляд. В РНР для этого существуют специальные функции.

Преобразование текста в HTML

Быстрое преобразование простого текста к формату web-браузера — весьма распространенная задача. В ее решении вам помогут функции, описанные в этом разделе.

nl2br()

Функция nl2br() заменяет все символы новой строки (\n) эквивалентными конструкциями HTML.

Синтаксис функции nl2br():

string nl2br (string строка)

Символы новой строки могут быть как видимыми (то есть явно включенными в строку), так и невидимыми (например, введенными в редакторе). В следующем примере текстовая строка преобразуется в формат HTML посредством замены символов \n разрывами строк:

При последующем выводе $html_recipe браузеру будет передан следующий текст в формате HTML:

htmlentities()

Функция htmlentities( ) преобразует символы в эквивалентные конструкции HTML. Синтаксис функции htmlentities:

string htmlentities (string строка)

В следующем примере производится необходимая замена символов строки для вывода в браузере:

Функция htmlentities( ) в настоящее время работает только для символов кодировки ISO-8559-1 (ISO-Latin-1). Кроме того, она не преобразует пробелы в , как следовало бы ожидать.

htmlspecialchars()

Функция htmlspecialchars( ) заменяет некоторые символы, имеющие особый смысл в контексте HTML, эквивалентными конструкциями HTML. Синтаксис функции htmlspecialchars( ):

string htmlspecialchars (string строка)

Функция html special chars( ) в настоящее время преобразует следующие символы: & преобразуется в &; » » преобразуется в «; < преобразуется в <; > преобразуется в >.

В частности, эта функция позволяет предотвратить ввод пользователями разметки HTML в интерактивных web-приложениях (например, в электронных форумах). Ошибки, допущенные в разметке HTML, могут привести к тому, что вся страница будет формироваться неправильно. Впрочем, у этой задачи существует и более эффективное решение — полностью удалить теги из строки функцией strip_tags( ).

Следующий пример демонстрирует удаление потенциально опасных символов функцией htmlspeclalchars( ):

Если функция htmlspecialchars( ) используется в сочетании с nl2br( ), то последнюю следует вызывать после htmlspecialchars( ). В противном случае конструкции <br>, сгенерированные при вызове nl2br( ), преобразуются в видимые символы.

get_html_translation_table()

Функция get_html_translation_table( ) обеспечивает удобные средства преобразования текста в эквиваленты HTML Синтаксис функции get_htrril_translation_table( ):

string get_html_translation_table (int таблица)

Функция get_html_translation_table( ) возвращает одну из двух таблиц преобразования (определяется параметром таблица), используемых в работе стандартных функций htmlspecialchars( ) и htmlentities( ). Возвращаемое значение может использоваться в сочетании с другой стандартной функцией, strtr(), для преобразования текста в код HTML.

Параметр таблица принимает одно из двух значений:

  • HTML_ENTITIES;
  • HTML_SPECIALCHARS.

В следующем примере функция get_html_translation_table( ) используется при преобразовании текста в код HTML:

Кстати, функция array_flip( ) позволяет провести преобразование текста в HTML в обратном направлении и восстановить исходный текст. Предположим, что вместо вывода результата strtr( ) в предыдущем примере мы присвоили его переменной $translated string.

В следующем примере исходный текст восстанавливается функцией array_flip( ):

strtr()

Функция strtr( ) транслирует строку, то есть заменяет в ней все символы, входящие в строку источник, соответствующими символами строки приемник. Синтаксис функции strtr( ):

string strtr (string строка, string источник, string приемник)

Если строки источник и приемник имеют разную длину, длинная строка усекается до размеров короткой строки.

Существует альтернативный синтаксис вызова strtr( ) с двумя параметрами; в этом случае второй параметр содержит ассоциативный массив, ключи которого соответствуют заменяемым подстрокам, а значения — заменяющим подстрокам. В следующем примере теги HTML заменяются XML-подобными конструкциями:

Преобразование HTML в простой текст

Иногда возникает необходимость преобразовать файл в формате HTML в простой текст. Функции, описанные ниже, помогут вам в решении этой задачи.

strip_tags()

Функция strip_tags( ) удаляет из строки все теги HTML и РНР, оставляя в ней только текст. Синтаксис функции strip_tags( ):

string strip_tags (string строка [, string разрешенные_тerи])

Необязательный параметр разрешенные_теги позволяет указать теги, которые должны пропускаться в процессе удаления.

Ниже приведен пример удаления из строки всех тегов HTML функцией strip_tags( ):

В следующем примере удаляются не все, а лишь некоторые теги:

Удаление тегов из текста также производится функцией fgetss().

get_meta_tags()

Хотя функция get_meta_tags( ) и не имеет прямого отношения к преобразованию текста, зто весьма полезная функция, о которой следует упомянуть. Синтаксис функции get_meta_tags( ):

array get_meta_tags (string имя_файла/URL [, int включение_пути])

Функция get_meta_tags( ) предназначена для поиска в файле HTML тегов МЕТА.

Теги МЕТА содержат информацию о странице, используемую главным образом поисковыми системами. Эти теги находятся внутри пары тегов . Применение тегов МЕТА продемонстрировано в следующем фрагменте (назовем его example.html, поскольку он будет использоваться в листинге 8.2): [/html] PHP Recipes [/html] Функция get_meta_tags( ) ищет в заголовке документа теги, начинающиеся словом МЕТА, и сохраняет имена тегов и их содержимое в ассоциативном массиве. В листинге 8.2 продемонстрировано применение этой функции к файлу example.html. Листинг 8.2. Извлечение тегов МЕТА из файла HTML функцией get_meta_tags( )

Интересная подробность: данные тегов МЕТА можно извлекать не только из файлов, находящихся на сервере, но и из других URL.

Преобразование строки к верхнему и нижнему регистру

В РНР существует четыре функции, предназначенных для изменения регистра строки:

  • strtolower();
  • strtoupper();
  • ucfirst();
  • ucwords().
strtolower( )

Функция strtolower( ) преобразует все алфавитные символы строки к нижнему регистру. Синтаксис функции strtolower():

string strtolower(string строка)

Неалфавитные символы функцией не изменяются. Преобразование строки к нижнему регистру функцией strtolower() продемонстрировано в следующем примере:

strtoupper()

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

string strtoupper (string строка)

Неалфавитные символы функцией не изменяются. Преобразование строки к верхнему регистру функцией strtoupper() продемонстрировано в следующем примере:

ucfirst()

Функция ucfirst( ) преобразует к верхнему регистру первый символ строки — при условии, что он является алфавитным символом. Синтаксис функции ucfirst():

string ucfirst (string строка)

Неалфавитные символы функцией не изменяются. Преобразование первого символа строки функцией ucfirst() продемонстрировано в следующем примере:

ucwords()

Функция ucwords( ) преобразует к верхнему регистру первую букву каждого слова в строке. Синтаксис функции ucwords():

string ucwords (string строка»)

Неалфавитные символы функцией не изменяются. «Слово» определяется как последовательность символов, отделенная от других элементов строки пробелами. В следующем примере продемонстрировано преобразование первых символов слов функцией ucwords( ):

strrchr()

strrchr(«строка», «о») — Находит последнее вхождение подстроки

Если подстрока не найдена, возвращает FALSE.

В отличие от strchr(), если искомая строка состоит более чем из одного символа, используется только первый символ.

Если второй параметр не является строкой, он приводится к целому и трактуется как код символа.

highlight_string()

mixed highlight_string (string str [, bool return])

Функция highlight_string() выводит версию с расцвеченным синтаксисом строки str, используя цвета, определённые во встроенном выделении синтаксиса PHP.

Если второй параметр return имеет значение TRUE, то highlight_string() возвратит версию раскрашенного кода как строку, вместо её печати. Если второй параметр не имеет значение TRUE, highlight_string() возвратит TRUE при успехе, FALSE при неудаче.

Примечание: 1.параметр return стал доступен, начиная с PHP 4.2.0. До этого он работал, как по умолчанию, т.е. FALSE.
2.Функция Highlight_String() различает PHP код по тегам <?php ?>. show_source() — синоним highlight_file(). Для изменения цвета выделения по умолчанию используйте следующие PHP директивы:

в .htaccess: в PHP:

addslashes()

Возвращает сроку, в которой перед каждым спецсимволом добавлен обратный слэш (\), например для последующего использования этой строки в запросе к базе данных.

Экранируются одиночная кавычка (‘), дойная кавычка («), обратный слэш (\) и NUL (байт NULL).

Строки

Строка — это набор символов, где символ — это то же самое, что и байт. Это значит, что PHP поддерживает ровно 256 различных символов, а также то, что в PHP нет встроенной поддержки Unicode. Смотрите также подробности реализации строкового типа.

Замечание: Строки ( string ) не могут быть размером более 2 Гб (2147483647 байт).

Синтаксис

Строка может быть определена четырьмя различными способами:

  • одинарными кавычками
  • двойными кавычками
  • heredoc-синтаксисом
  • nowdoc-синтаксисом (начиная с версии PHP 5.3.0)
Одинарные кавычки

Простейший способ определить строку — это заключить ее в одинарные кавычки (символ ').

Чтобы использовать одинарную кавычку внутри строки, проэкранируйте ее обратной косой чертой (\). Если необходимо написать саму обратную косую черту, продублируйте ее (\\). Все остальные случаи применения обратной косой черты будут интерпретированы как обычные символы: это означает, что если вы попытаетесь использовать другие управляющие последовательности, такие как \r или \n, они будут выведены как есть вместо какого-либо особого поведения.

Замечание: В отличие от синтаксиса двойных кавычек и heredoc, переменные и управляющие последовательности для специальных символов, заключенных в одинарные кавычки, не обрабатываются.

<?php
echo ‘это простая строка’ ;

echo ‘Также вы можете вставлять в строки
символ новой строки вот так,
это нормально’ ;

// Выводит: Однажды Арнольд сказал: «I’ll be back»
echo ‘Однажды Арнольд сказал: «I\’ll be back»‘ ;

// Выводит: Вы удалили C:\*.*?
echo ‘Вы удалили C:\\*.*?’ ;

// Выводит: Вы удалили C:\*.*?
echo ‘Вы удалили C:\*.*?’ ;

// Выводит: Это не будет развернуто: \n новая строка
echo ‘Это не будет развернуто: \n новая строка’ ;

// Выводит: Переменные $expand также $either не разворачиваются
echo ‘Переменные $expand также $either не разворачиваются’ ;
?>

Двойные кавычки

Если строка заключена в двойные кавычки ("), PHP распознает большее количество управляющих последовательностей для специальных символов:

Управляющие последовательности

Последовательность Значение
\n новая строка (LF или 0x0A (10) в ASCII)
\r возврат каретки (CR или 0x0D (13) в ASCII)
\t горизонтальная табуляция (HT или 0x09 (9) в ASCII)
\v вертикальная табуляция (VT или 0x0B (11) в ASCII) (с версии PHP 5.2.5)
\e escape-знак (ESC или 0x1B (27) в ASCII) (с версии PHP 5.4.4)
\f подача страницы (FF или 0x0C (12) в ASCII) (с версии PHP 5.2.5)
\\ обратная косая черта
\$ знак доллара
\" двойная кавычка
\[0-7] последовательность символов, соответствующая регулярному выражению символа в восьмеричной системе счисления
\x[0-9A-Fa-f] последовательность символов, соответствующая регулярному выражению символа в шестнадцатеричной системе счисления

Как и в строке, заключенной в одинарные кавычки, экранирование любого символа выведет также и саму обратную косую черту. До версии PHP 5.1.1, обратная косая черта в \ не печаталась.

Но самым важным свойством строк в двойных кавычках является обработка переменных. Смотрите более подробно: обработка строк

Heredoc

Третий способ определения строк — это использование heredoc-синтаксиса: <<<. После этого оператора необходимо указать идентификатор, затем перевод строки. После этого идет сама строка, а потом этот же идентификатор, закрывающий вставку.

Строка должна начинаться с закрывающего идентификатора, т.е. он должен стоять в первом столбце строки. Кроме того, идентификатор должен соответствовать тем же правилам именования, что и все остальные метки в PHP: содержать только буквенно-цифровые символы и знак подчеркивания, и не должен начинаться с цифры (знак подчеркивания разрешается).

Очень важно отметить, что строка с закрывающим идентификатором не должна содержать других символов, за исключением точки с запятой (;). Это означает, что идентификатор не должен вводиться с отступом и что не может быть никаких пробелов или знаков табуляции до или после точки с запятой. Важно также понимать, что первым символом перед закрывающим идентификатором должен быть символ новой строки, определенный в вашей операционной системе. Например, в UNIX системах, включая Mac OS X, это \n. После закрывающего идентификатора также сразу должна начинаться новая строка.

Если это правило нарушено и закрывающий идентификатор не является "чистым", считается, что закрывающий идентификатор отсутствует и PHP продолжит его поиск дальше. Если в этом случае верный закрывающий идентификатор так и не будет найден, то это вызовет ошибку парсинга с номером строки в конце скрипта.

Heredoc не может быть использован для инициализации полей класса. Начиная с версии PHP 5.3, это ограничение распространяется только на heredoc, содержащие внутри себя переменные.

Пример #1 Неверный пример

Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что вам нет необходимости экранировать кавычки в heredoc, но вы по-прежнему можете использовать вышеперечисленные управляющие последовательности. Переменные обрабатываются, но с применением сложных переменных внутри heredoc нужно быть также внимательным, как и при работе со строками.

Пример #2 Пример определения heredoc-строки

<?php
$str = <<<EOD
Пример строки,
охватывающей несколько строчек,
с использованием heredoc-синтаксиса.
EOD;

/* Более сложный пример с переменными. */
class foo
<
var $foo ;
var $bar ;

function foo ()
<
$this -> foo = ‘Foo’ ;
$this -> bar = array( ‘Bar1’ , ‘Bar2’ , ‘Bar3’ );
>
>

$foo = new foo ();
$name = ‘МоеИмя’ ;

echo <<<EOT
Меня зовут » $name «. Я печатаю $foo -> foo .
Теперь я вывожу < $foo -> bar [ 1 ]>.
Это должно вывести заглавную букву ‘A’: \x41
EOT;
?>

Результат выполнения данного примера:

Также возможно использовать heredoc-синтаксис для передачи данных через аргументы функции:

Пример #3 Пример применения heredoc в аргументах

Начиная с версии 5.3.0, стала возможной инциализация статических переменных и свойств/констант класса с помощью синтаксиса heredoc:

Пример #4 Использование heredoc для инциализации статических переменных

<?php
// Статические переменные
function foo ()
<
static $bar = <<<LABEL
Здесь ничего нет.
LABEL;
>

// Class properties/constants
class foo
<
const BAR = <<<FOOBAR
Пример использования константы
FOOBAR;

public $baz = <<<FOOBAR
Пример использования поля
FOOBAR;
>
?>

Начиная с версии PHP 5.3.0 можно также окружать идентификатор Heredoc двойными кавычками:

Пример #5 Использование двойных кавычек в heredoc

Nowdoc

Nowdoc — это то же самое для строк в одинарных кавычках, что и heredoc для строк в двойных кавычках. Nowdoc похож на heredoc, но внутри него не осуществляется никаких подстановок. Эта конструкция идеальна для внедрения PHP-кода или других больших блоков текста без необходимости его экранирования. В этом он немного похож на SGML-конструкцию <![CDATA[ ]]> тем, что объявляет блок текста, не предназначенный для обработки.

Nowdoc указывается той же последовательностью <<<, что используется в heredoc, но последующий за ней идентификатор заключается в одинарные кавычки, например, <<<'EOT'. Все условия, действующие для heredoc идентификаторов также действительны и для nowdoc, особенно те, что относятся к закрывающему идентификатору.

Пример #6 Пример использования nowdoc

<?php
$str = <<<‘EOD’
Пример текста,
занимающего несколько строк,
с помощью синтаксиса nowdoc.
EOD;

/* Более сложный пример с переменными. */
class foo
<
public $foo ;
public $bar ;

function foo ()
<
$this -> foo = ‘Foo’ ;
$this -> bar = array( ‘Bar1’ , ‘Bar2’ , ‘Bar3’ );
>
>

$foo = new foo ();
$name = ‘МоеИмя’ ;

echo <<<‘EOT’
Меня зовут «$name». Я печатаю $foo->foo.
Теперь я печатаю <$foo->bar[1]>.
Это не должно вывести заглавную ‘A’: \x41
EOT;
?>

Результат выполнения данного примера:

Замечание:

В отличие от heredoc, nowdoc может быть использован в любом контексте со статическими данными. Типичный пример инициализации полей класса или констант:

Пример #7 Пример использования статичных данных

Замечание:

Поддержка nowdoc была добавлена в PHP 5.3.0.

Обработка переменных

Если строка указывается в двойных кавычках, либо при помощи heredoc, переменные внутри нее обрабатываются.

Существует два типа синтаксиса: простой и сложный. Простой синтаксис более легок и удобен. Он дает возможность обработки переменной, значения массива ( array ) или свойства объекта ( object ) с минимумом усилий.

Сложный синтаксис может быть определен по фигурным скобкам, окружающим выражение.

Простой синтаксис

Если интерпретатор встречает знак доллара ($), он захватывает так много символов, сколько возможно, чтобы сформировать правильное имя переменной. Если вы хотите точно определить конец имени, заключайте имя переменной в фигурные скобки.

echo «He drank some $juice juice.» . PHP_EOL ;
// не работает, ‘s’ — это верный символ для имени переменной,
// но наша переменная имеет имя $juice.
echo «He drank some juice made of $juices .» ;
?>

Результат выполнения данного примера:

Аналогично могут быть обработаны элемент массива ( array ) или свойство объекта ( object ). В индексах массива закрывающая квадратная скобка (]) обозначает конец определения индекса. Для свойств объекта применяются те же правила, что и для простых переменных.

Пример #8 Пример простого синтаксиса

<?php
$juices = array( «apple» , «orange» , «koolaid1» => «purple» );

echo «He drank some $juices [ 0 ] juice.» . PHP_EOL ;
echo «He drank some $juices [ 1 ] juice.» . PHP_EOL ;
echo «He drank some $juices [ koolaid1 ] juice.» . PHP_EOL ;

class people <
public $john = «John Smith» ;
public $jane = «Jane Smith» ;
public $robert = «Robert Paulsen» ;

public $smith = «Smith» ;
>

$people = new people ();

echo » $people -> john drank some $juices [ 0 ] juice.» . PHP_EOL ;
echo » $people -> john then said hello to $people -> jane .» . PHP_EOL ;
echo » $people -> john ‘s wife greeted $people -> robert .» . PHP_EOL ;
echo » $people -> robert greeted the two $people -> smiths .» ; // Won’t work
?>

Результат выполнения данного примера:

Для чего-либо более сложного, используйте сложный синтаксис.

Сложный (фигурный) синтаксис

Он называется сложным не потому, что труден в понимании, а потому что позволяет использовать сложные выражения.

Любая скалярная переменная, элемент массива или свойство объекта, отображаемое в строку, может быть представлена в строке этим синтаксисом. Просто запишите выражение так же, как и вне строки, а затем заключите его в <и >. Поскольку <не может быть экранирован, этот синтаксис будет распознаваться только когда $ следует непосредственно за <. Используйте <\$, чтобы напечатать <$. Несколько поясняющих примеров:

<?php
// Показываем все ошибки
error_reporting ( E_ALL );

// Не работает, выводит: Это < здорово>
echo «Это < $great >» ;

// Работает, выводит: Это здорово
echo «Это < $great >» ;
echo «Это $ < great >» ;

// Работает
echo «Этот квадрат шириной < $square -> width >00 сантиметров.» ;

// Работает, ключи, заключенные в кавычки, работают только с синтаксисом фигурных скобок
echo «Это работает: < $arr [ 'key' ]>» ;

// Это неверно по той же причине, что и $foo[bar] вне
// строки. Другими словами, это по-прежнему будет работать,
// но поскольку PHP сначала ищет константу foo, это вызовет
// ошибку уровня E_NOTICE (неопределенная константа).
echo «Это неправильно: < $arr [ foo ][ 3 ]>» ;

// Работает. При использовании многомерных массивов внутри
// строк всегда используйте фигурные скобки
echo «Это работает: < $arr [ 'foo' ][ 3 ]>» ;

// Работает.
echo «Это работает: » . $arr [ ‘foo’ ][ 3 ];

echo «Это значение переменной по имени $name : <$< $name >> » ;

echo «Это значение переменной по имени, которое возвращает функция getName(): <$< getName ()>> » ;

echo «Это значение переменной по имени, которое возвращает \$object->getName(): <$< $object -> getName ()>> » ;

// Не работает, выводит: Это то, что возвращает getName():
echo «Это то, что возвращает getName(): » ;
?>

С помощью этого синтаксиса также возможен доступ к свойствам объекта внутри строк.

<?php
class foo <
var $bar = ‘I am bar.’ ;
>

Результат выполнения данного примера:

Замечание:

Функции, вызовы методов, статические переменные классов, а также константы классов работает внутри , начиная с версии PHP 5. Однако, указываемое значение будет обработано как имя переменной в том же контексте, что и строка, в которой она определяется. Использование одинарных фигурных скобок (<>) не будет работать для доступа к значениям функций, методов, констант классов или статических переменных класса.

<?php
// Показываем все ошибки
error_reporting ( E_ALL );

class beers <
const softdrink = ‘rootbeer’ ;
public static $ale = ‘ipa’ ;
>

$rootbeer = ‘A & W’ ;
$ipa = ‘Alexander Keith\’s’ ;

// Это работает, выводит: Я бы хотел A & W
echo «Я бы хотел <$< beers :: softdrink >> \n» ;

// Это тоже работает, выводит: Я бы хотел Alexander Keith’s
echo «Я бы хотел <$< beers :: $ale >> \n» ;
?>

Доступ к символу в строке и его изменение

Символы в строках можно использовать и модифицировать, определив их смещение относительно начала строки, начиная с нуля, в квадратных скобках после строки, например, $str[42] . Думайте о строке для этой цели, как о массиве символов. Если нужно получить или заменить более 1 символа, можно использовать функции substr() и substr_replace() .

Замечание: К символу в строке также можно обращаться с помощью фигурных скобок, например, $str <42>.

Попытка записи в смещение за границами строки дополнит строку пробелами до этого смещения. Нецелые типы будет преобразованы в целые. Неверный тип смещения вызовет ошибку уровня E_NOTICE . Запись по отрицательному смещению вызовет ошибку уровня E_NOTICE , а при чтении вернет пустую строку. Используется только первый символ присваемой строки. Присвоение пустой строки присваивает нулевой байт (NULL).

Строки в PHP внутренне представляют из себя массивы байт. Как результат, доступ или изменение строки по смещению небезопасно с точки зрения многобайтной кодировки, и должно выполняться только со строками в однобайтных кодировках, таких как, например, ISO-8859-1.

Пример #9 Несколько примеров строк

<?php
// Получение первого символа строки
$str = ‘This is a test.’ ;
$first = $str [ 0 ];

// Получение третьего символа строки
$third = $str [ 2 ];

// Получение последнего символа строки
$str = ‘This is still a test.’ ;
$last = $str [ strlen ( $str )- 1 ];

// Изменение последнего символа строки
$str = ‘Look at the sea’ ;
$str [ strlen ( $str )- 1 ] = ‘e’ ;

Начиная с PHP 5.4 смещение в строке должно задаваться либо целым числом либо строкой, содержащей цифры, иначе будет выдаваться предупреждение. Ранее смещение, заданное строкой вида "foo", без предупреждений преобразовывалось в 0.

Пример #10 Различия между PHP 5.3 и PHP 5.4

var_dump ( $str [ ‘1’ ]);
var_dump (isset( $str [ ‘1’ ]));

var_dump ( $str [ ‘1.0’ ]);
var_dump (isset( $str [ ‘1.0’ ]));

var_dump ( $str [ ‘x’ ]);
var_dump (isset( $str [ ‘x’ ]));

var_dump ( $str [ ‘1x’ ]);
var_dump (isset( $str [ ‘1x’ ]));
?>

Результат выполнения данного примера в PHP 5.3:

Результат выполнения данного примера в PHP 5.4:

Замечание:

Попытка доступа к переменным других типов (исключая массивы или объекты, реализующие определенные интерфейсы) с помощью [] или <> молча вернет NULL .

Замечание:

В PHP 5.5 была добавлена поддержка доступа к символам в строковых литералах с помощью синтаксиса [] или <>.

Полезные функции и операторы

Строки могут быть объединены при помощи оператора '.' (точка). Обратите внимание, оператор сложения '+' здесь не работает. Дополнительную информацию смотрите в разделе Строковые операторы.

Для модификации строк существует множество полезных функций.

Основные функции описаны в разделе строковых функций, а для расширенного поиска и замены — функции регулярных выражений или Perl-совместимых регулярных выражений.

Также существуют функции для работы с URL, и функции шифрования/дешифрования строк (mcrypt и mhash).

Преобразование в строку

Значение может быть преобразовано в строку, с помощью приведения (string), либо функции strval() . В выражениях, где необходима строка, преобразование происходит автоматически. Это происходит, когда вы используете функции echo или print , либо когда значение переменной сравнивается со строкой. Прочтение разделов руководства Типы и Манипуляции с типами сделает следующее более понятным. Смотрите также settype() .

Значение boolean TRUE преобразуется в строку "1", а значение FALSE преобразуется в "" (пустую строку). Это позволяет преобразовывать значения в обе стороны — из булева типа в строковый и наоборот.

Целое ( integer ) или число с плавающей точкой ( float ) преобразуется в строку, представленную числом, состоящим из его цифр (включая показатель степени для чисел с плавающей точкой). Числа с плавающей точкой могут быть преобразованы с помощью экспоненциального представления (4.1E+6).

Замечание:

Символ десятичной точки определяется из настроек локали текущего скрипта (категория LC_NUMERIC). Смотрите также setlocale() .

Массивы всегда преобразуются в строку "Array", так что вы не можете отобразить содержимое массива ( array ), используя echo или print , чтобы узнать, что он содержит. Чтобы просмотреть отдельный элемент, используйте что-нибудь вроде echo $arr['foo']. Смотрите ниже советы о том, как отобразить/просмотреть все содержимое.

Объекты в PHP 4 всегда преобразовывались в строку "Object". Если вы хотите вывести значения полей объекта ( object ) с целью отладки, читайте дальше. Если вы хотите получить имя класса требуемого объекта, используйте get_class() . Начиная с PHP 5, также стал доступен метод __toString.

Resource всегда всегда преобразуется в string вида "Resource id #1", где 1 является номером ресурса привязанного к resource во время выполнения. И хотя не стоит точно полагаться на эту строку, которая может быть изменена в будущем, она всегда будет уникальной для текущего запуска скрипта (т.е. web-запроса или CLI-процесса) и не может использоваться повторно для другого ресурса. Если вы хотите получить тип ресурса, используйте get_resource_type() .

NULL всегда преобразуется в пустую строку.

Как вы могли видеть выше, прямое преобразование в строку массивов, объектов или ресурсов не дает никакой полезной информации о самих значениях, кроме их типов. Более подходящий способ вывода значений для отладки — использовать функции print_r() и var_dump() .

Большинство значений в PHP может быть преобразовано в строку для постоянного хранения. Этот метод называется сериализацией и может быть выполнен при помощи функции serialize() . Кроме того, если в вашей установке PHP есть поддержка WDDX, возможна также сериализация в XML-структуру.

Преобразование строк в числа

Если строка распознается как числовое значение, результирующее значение и тип определяется так, как показано далее.

Если строка не содержит какой-либо из символов '.', 'e', или 'E', и значение числа помещается в пределы целых чисел (определенных PHP_INT_MAX ), строка будет распознана как целое число ( integer ). Во всех остальных случаях она считается числом с плавающей точкой ( float ).

Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Верное числовое значение — это одна или более цифр (могущих содержать десятичную точку), по желанию предваренных знаком, с последующим необязательным показателем степени. Показатель степени — это 'e' или 'E' с последующими одной или более цифрами.

Более подробную информацию об этом преобразовании смотрите в разделе о strtod(3) документации Unix.

Если вы хотите протестировать любой из примеров этого раздела, скопируйте и вставьте его и следующую строку, чтобы увидеть, что происходит:

Не ожидайте получить код символа, преобразовав его в целое (как это делается, например, в C). Для преобразования символов в их ASCII коды и обратно используйте функции ord() и chr() .

Подробности реализации строкового типа

Строковый тип ( string ) в PHP реализован в виде массива байт и целого числа, содержащего длину буфера. Он не содержит никакой информации о способе преобразования этих байт в символы, предоставляя эту задачу программисту. Нет никаких ограничений на содержимое строки, например, байт со значением 0 ("NUL"-байт) может располагаться где угодно (однако, стоит учитывать, что некоторые функции, как сказано в этом руководстве, не являются "бинарно-безопасными", т.е. они могут передавать строки библиотекам, которые игнорируют данные после NUL-байта).

Данная природа строкового типа объясняет почему в PHP нет отдельного типа “byte” — строки играют эту роль. Функции, возвращающие нетекстовые данные — например, произвольный поток данных, считываемый из сетевого сокета — тем не менее возвращают строки.

Принимая во внимание тот факт, что PHP не диктует определенную кодировку для строк, можно задать вопрос, как в таком случае кодируются строковые литералы. Например, строка "á" эквивалентна "\xE1" (ISO-8859-1), "\xC3\xA1" (UTF-8, форма нормализации C), "\x61\xCC\x81" (UTF-8, форма нормализации D) или какому-либо другому возможному представлению? Ответом является следующее: строка будет закодирована тем образом, которым она записана в файле скрипта. Таким образом, если скрипт записан в кодировке ISO-8859-1, то и строка будет закодирована в ISO-8859-1 и т.д. Однако, это правило не применяется при включенном режиме Zend Multibyte: в этом случае скрипт может быть записан в любой кодировке (которая указывается ясно или определяется автоматически), а затем конвертируются в определенную внутреннюю кодировку, которая и будет впоследствии использована для строковых литералов. Учтите, что на кодировку скрипта (или на внутреннюю кодировку, если включен режим Zend Multibyte) накладываются некоторые ограничения: практически всегда данная кодировка должна быть надмножеством ASCII, например, UTF-8 или ISO-8859-1. Учтите также, что кодировки, зависящие от состояния, где одни и те же значения байт могут быть использованы в начальном и не начальном состоянии сдвига (initial and non-inital shift state), могут вызвать проблемы.

Разумеется, чтобы приносить пользу, строковые функции должны сделать некоторые предположения о кодировке строки. К несчастью, среди PHP-функций довольно большое разнообразие подходов к этому вопросу:

  • Некоторые функции предполагают, что строка закодирована в какой-либо однобайтовой кодировке, однако, для корректной работы им не требуется интерпретировать байты как определенные символы. Под эту категорию попадают, например, substr() , strpos() , strlen() и strcmp() . Другой способ мышления об этих функциях представляет собой оперирование буферами памяти, т.е. они работают непосредственно с байтами и их смещениями. offsets.
  • Другие функции ожидают передачу кодировку в виде параметра, возможно, предполагая некоторую кодировку по умолчанию, если параметр с кодировкой не был указан. Такой функцией является htmlentities() и большинство функций из расширения mbstring.
  • Другие функции используют текущие установки локали (см. setlocale() ), но оперируют побайтово). В эту категорию попадают strcasecmp() , strtoupper() и ucfirst() . Это означает, что они могут быть использованы только с однобайтовыми кодировками, в том случае, когда кодировка совпадает с локалью. Например, strtoupper("á") может вернуть "Á", если локаль установлена корректно и буква á закодирована в виде одного байта. Если она закодирована в UTF-8, будет возвращен некорректный результат, и, в зависимости от текущей локали, результирующая строка может быть (или не быть) испорчена.
  • Наконец, есть функции, подразумевающие, что строка использует определенную кодировку, обычно UTF-8. Сюда попадают большинство функций из расширений intl и PCRE (в последнем случае, только при указании модификатора u). Хотя это и сделано специально, функция utf8_decode() подразумевает кодировку UTF-8, а utf8_encode() — ISO-8859-1.

В конечном счете, написание корректных программ, работающих с Unicode, означает осторожное избегание функций, которые не работают с Unicode и, скорее всего, испортят данные, и использование вместо них корректных функций, обычно из расширений intl и mbstring. Однако, использование функций, способных работать с Unicode, является самым началом. Вне зависимости от тех функций, которые предоставляет язык, необходимо знать спецификацию самого Unicode. Например, если программа предполагает существование в языке только строчных и заглавных букв, то она делает большую ошибку.

Перенос строки

Вопрос от новичка. В документации пишется что \r\n — это указание конца строки и перевода каретки. На деле не работает. Перевожу по /br . Что же такое тогда \n .

Добавлено.

Немного про другое спрашивал. В учебнике явно сказано:

Но на практике не работает. Пишет в одну строку. Вот я и не понял. В чем подвох.

Nicolas Chabanovsky's user avatar

Если у вас весь код на писан для вывода через «\r\n» (Кстати вместо нее лучше использовать PHP_EOL , для кроссплатформенности), то есть замечательная функция nl2br(), которая пройдет по строке, в которую записали весь текст сформированный страницы, и заменит все переводы строк на <br/> .

Если вы хотите перенести строки на странице, которая отображается, то используйте <br/> помимо этого существует ещё и исходный код. Перенос там осуществляется именно посредством \n . Исходный код форматируют для читабельности.

Взгляните на исходный код этой страницы. Все эти переносы и сделаны посредством \n либо обычного нажатия Enter .

Этот код на php

В этом и разница. Надеюсь, правильно понял ваш вопрос.

Nicolas Chabanovsky's user avatar

Результат с переводом строки получится при выводе текста в файл или при помещении его в <pre> или textarea . Если вы хотите вывести текст с переносом на экран, пользуйтесь функцией nl2br.
Да и вообще, не верьте учебникам на слово. 😉

<br /> — это HTML-тег, который говорит браузеру о том, что следующий за ним контент должен выводиться с новой строки.

\r\n — обычный перевод строки в тексте. Также есть кросплатформенная константа для перевода строки — PHP_EOL .

Переводы строк в тексте браузером игнорируются (кроме нескольких исключительных ситуаций) и их можно увидеть только если открыть HTML-код страницы.

Про PHP_EOL сказали верно,например этот код: <?php echo «hello»,PHP_EOL; echo «world» ?> даст hello world

PHP: строки

Roman

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

Искусственных ограничений на длину строки не существует. В пределах доступной памяти вы можете создавать строки произвольно выбранной длины.

Строки, разделенные двойными кавычками (как “эта”), предварительно обрабатываются PHP двумя способами:

  • Определенные последовательности символов, начинающиеся с обратной косой черты (\), заменяются специальными символами.
  • Имена переменных (начинающиеся с $) заменяются строковыми представлениями их значений.

Замена последовательности символов осуществляется следующим образом:

  • \n заменяется символом новой строки;
  • \r заменяется символом возврата каретки;
  • \t заменяется символом табуляции;
  • \$ заменяется знаком доллара ($);
  • \” заменяется одинарной двойной кавычкой (“);
  • \\ заменяется одним обратным слешем (\).

Оператор конкатенации (объединения) строк

Чтобы объединить две строковые переменные вместе, используется оператор-точка ( . ):

В приведенным выше коде два раза использовался оператор конкатенации. Это связано с необходимостью вставить третью строку.

Между двумя строковыми переменными мы добавили строку с одним символом, пустым пробелом, чтобы разделить две переменные.

Функция strlen()

Функция strlen() используется для нахождения длины строки.

Найдем длину строки “Hello world!”.

Это приведет к следующему результату:

Длина строки часто используется в циклах или других функциях, если важно знать, когда заканчивается строка (например, при необходимости остановить цикл после последнего символа в строке).

Функция strpos()

Функция strpos() используется для поиска строки или символа в строке.

Если в строке найдено совпадение, функция возвращает позицию первого совпадения. Если совпадение не найдено, она вернет FALSE.

Попробуем найти строку “world” в строке “Hello world!”

Это даст следующий результат:

Как видите, позиция строки “world” в нашей строке — 6. Причина того, что это 6, а не 7, заключается в том, что первая позиция в строке равна 0, а не 1.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *