Операции над строками.
Свойства строки в PHP:
Для конкатенации (присоединения строк) используется оператор "." (точка). Пример конкатенации строк:
<?
$a = "20";
$b = "10";
$c = $a.$b; //число + число
echo "$c\n"; //выведет 2010
$d = "Hello";
$c = $a.$d; // число + строка
echo "$c\n"; //выведет 20Hello
?>
В PHP операнды сравниваются как строки, только в том случае, если они - строки. В противном случае они сравниваются, как числа. При этом любая строка, которую интерпретатору не удается перевести в число, будет восприниматься, как 0.
Лучше всего для сравнения использовать = = = (тройной оператор равенства - оператор эквивалентности). Он всегда позволяет производить корректное сравнение, т.к. он сравнивает величины и по значению, и по типу.
Базовые функции работы со строками.
Функция strlen() возвращает длину строки, то есть количество символов, которое содержит строка.
$a = "Hello";
echo strlen ($a); //выведет5
Функция strpos() ищет подстроку в строке. Функции нужно передать три параметра:
Если строка не найдена, функция возвращает false, в противном случае - номер позиции, с которой начинается вхождение подстроки в строку:
echo strpos("Hello", "el"); // выведет 1
Функция substr (string $str, int $from, int $lenght) возвращает заданный участок строки, то есть подстроку. Возвращается подстрока строки $str, начиная с позиции $from длины $length. Если параметр $from будет отрицательным, то отсчет подстроки будет производиться с конца строки, а не с начала. Параметр $length является необязательным.
$str = "Book";
echo substr ($str, 1, 1); // выведет o
echo substr ($str, -1, 1); // выведет k
Функция strcmp ($str1, $str2) сравнивает две строки и возвращает следующие значения:
0, если строки равны;
1, если строка $str1 лексикографически больше $str2;
-1, если строка $str1 "меньше" $str2.
Функция strasecmp (sstring $str1, string $str2) сравнивает две строки без учета регистра символов, то есть, строки BOOK, BOOK и book для этой функции равны.
Функция str_replace ($str1, $str2, $source) заменяет в строке $source (которая в процессе работы функции не изменяется) все вхождения подстроки $str1 на подстроку $str2 и возвращает результат в виде новой строки.
Пример замены символов новой строки \n на тэг <br>:
$str = str_replace ("\n", "<br>", $str);
Функция WordWrap() оказывается очень полезной, когда нужно отформатировать текст письма перед его отправкой. Данная функция разбивает текст письма на строки, завершая каждую символом разрыва строки(по умолчанию \n). В каждой строке должно быть не более 75 символов (но можно указать и другое их количество). Например:
<?
$s = "Очень длинный блок текста, который нужно разбить на части перед отправкой адресату";
echo $s."\n\n";
// разбиваем по 15 символов
$s = WordWrap ($s, 15, "\n");
echo $s;
?>
Функция strip_tags(). Данная функция удаляет из строки все HTML - тэги:
$s = strip_tags($s);
Список тэгов, которые не стоит удалять, можно указать их при вызове функции:
$s = strip_tags ($s, "<a><head>");
Функции для работы с отдельными символами.
Обратиться к любому символу строки можно по его индексу:
$str = "Book";
echo $str[0]; // выведет В
Функция chr (int $code) возвращает строку, состоящую из символа с кодом $code, а функция ord ($char) - код символа $char:
echo chr (75); // выведет K
echo ord ('A'); //выведет 65 - код буквы A
Для перевода символов в нижний регистр используется функция strtolower(), а в верхний - strtoupper():
$str = strtolower ($str);
$str = strtoupper ($str);
При изменении регистра русских букв могут возникнуть проблемы, избежать которых поможет правильная настройка локали. Локалью называется совокупность настроек системы, таких как формат даты и времени, язык, кодировка. Для установки локали используется функция SetLocale(), которой следует передать два параметра - категорию устанавливаемых параметров и локаль. Категория может быть следующей:
Любая локаль, установленная в системе, имеет свое уникальное имя, по которому можно к ней обратиться. Категория LC_TYPE устанавливает локаль для преобразования символов. Имя активизированной локали для катагории LC_TYPE содержится в элементе с ключом LAND массива GLOBALS (эта переменная окружения LAND). В некоторых случаях - это ru_RU.koi8. Для корректного преобразования символов нужно выполнить функцию:
SetLocal ('LC_TYPE', 'ru_RU.koi8');
После приема параметров (например при заполнении формы), прежде чем приступить к их обработке, нужно преобразовать значения параметров (удалить лишние пробелы). Пробельными символами являются символы " ", \n, \r, \t.
Функция trim() удаляет пробельные символы в начале и в конце строки, например:
$s = "string\n";
$s = trim ($s); // $s = "string"
Кроме функции trim() можно использовать функции ltrim() и chop(). Первая удаляет пробельные символы только в начале строки, вторая - только в конце.
URL - кодирование и декодирование.
Функция UrlEncode() используется для кодирования данных. Кодирование необходимо для передачи данных через Интернет, содержащих специальные символы национальных алфавитов, например русского языка. При передаче целого файла его необходимо закодировать с помощью функции UrlEncode().
Пример автоматического формирования ссылки < a href>:
$Param = "Русский текст";
echo "<a href=http://localhost/script.php?parametrs=".UrlEncode($Param). ">Click here</a>";
В следующем листинге приведен пример, демонстрирующий совместную работу функций UrlEncode() и UrlDecode():
<?
$Param = "Русский текст";
$Param = UrlEncode ($Param);
echo "$Param\n";
$Param = UrlDecode ($Param);
echo "$Param\n";
?>
Для вывода кавычек и наклонной черты необходимо использовать цитирование, то есть, запись этих символов через наклонную черту:
$s = "\\ \"'";
echo $s;
Для добавления слэшей используется функция AddSlashes (string $str), а для удаления - StripSlashes (atring $str).
Обе функции возвращают модифицированную строку и не изменяют исходную.
Замена специальных символов на их HTML - эквиваленты.
Функция HtmlSpecialChars (string $str) заменяет специальные символы (кавычки, "больше", "меньше" и другие) на их HTML - эквиваленты, для того, чтобы на Web - странице они выглядели сами собой. Например при использовании функции HtmlSpecialChars, знак "больше" в коде будет заменен строкой >, а кавычки - ". Пример использования функции HtmlSpecialChars:
<?
$s = "& < > \" ";
$s = HtmlSpecialChars ($s);
echo $s; // выведет & < > "
?>
В PHP применяется функция convert_cyr_string(), преобразующая русский текст из одной кодировки в другую. Данной функции необходимо передать три параметра:
Последние два параметра могут принимать следующие значения:
k - KOI8-R;
w -windows-1251;
d или a - x-cp866;
m - x-mac-cyrillic;
i - iso8859-5.
Пример использования функции convert_cyr_string():
<?
// Преобразование слова "Привет" из кодировки koi8-r в windows-1251
echo convert_cyr_string ("Привет", "k", "w"); // выведет "оПХБЕР"
?>
Хэш - функции md5() и crc32().
Функция md5() кодирует строку, используя алгоритм MD5 (Message Digest Algorithm). Вероятность того, что две разные строки будут иметь одинаковый хэш - код, стремится к нулю, а это позволяет эффективно использовать данную функцию для шифрования паролей. Зашифрованное с его помощью сообщение невозможно расшифровать - для алгоритма MD5 не существует алгоритма дешифровки. Для проверки подлинности пароля нужно зашифровать пароль заново и сравнить зашифрованные строки: если они равны, значит пароль правильный. Например:
<?
$a = "my_password";
$b = "my_password";
$c = "password";
if (md5 ($a) === md5 ($b)) echo "1: пароль правильный";
if (md5 ($a) === md5 ($c)) echo "2: пароль правильный";
?>
Сценарий выведет только первое сообщение, поскольку строки (значит, и их хэш - коды) равны. Рекомендация по использованию этой функции:
Кроме функции md5() можно использовать функцию crypt(), которая реализует алгоритм DES, но данный алгоритм менее эффективен, поэтому для серьезных проектов не применяется.
Функция crc32 () используется для вычисления 32 - битной контрольной суммы строки. Данная функция пригодна для регистрации программного продукта через Internet, является стандартной, и менее рекомендуема для серьезных проектов.