Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по сетям ЭВМ3.doc
Скачиваний:
27
Добавлен:
02.05.2014
Размер:
99.84 Кб
Скачать

Форматирование строк для хранения

Рассмотрим форматирование строк для хранения в базе данных. Определенные символы являются очень важной частью строки, но могут приводить к проблемам, в особенности при вставке в базу данных, поскольку она может интерпретировать их как управляющие символы. Такими символами являются кавычки (одинарные и двойные), символ “\” и символ NUL. Чтобы отменить эти символы перед ними необходимо поместить символ косой черты. Например, “ превращается в \”, \ - \\, \\ превращается в \\\\.

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

$feedback = AddSlashes($feedback);

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

$feedback = StripSlashes($feedback);

Объединение и разделение строк с помощью строковых функций

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

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

array explode(string separator, string input);

Эта функция принимает строку input и разделяет ее на части по указанной разделительной строке separator. Части строки возвращаются в виде массива.

Для получения имени домена из адреса электронной почты в сценарии можно использовать следующий код:

$email_array = explode(“@”, $email);

Адрес электронной почты разделяется на две части: имя пользователя, которое сохраняется в $email_array[0] и имя домена, которое сохраняется в $email_array[1]. Теперь можно промерить имя домена для определения источника сообщения клиента и для его переадресации соответствующему лицу:

if ($email_array[1] == “bigcustomer.com”)

$toaddress = bob@bobsdomain.com;

else

$toaddress = feedback@bobsdomain.com;

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

$email_array[1] = strtoupper ($email_array[1]);

Для противоположного действия используются функции implode() или join(), которые идентичны. Например,

$new_email = implode(“@”, $email_array);

Эта функция принимает элементы из массива $email_array и объединяет их со строкой, переданной в первом параметре.

В отличие от функции explode(), которая разделяет на части сразу всю строку, функция strtok() получает фрагменты (называемые лексемами) из строки по одному. Прототип функции имеет вид:

string strtok(string input, string separator);

В качестве разделителя separator можно использовать символ или строку символов. Для получения первой лексемы из строки нужно вызвать функцию strtok() со строкой, которую требуется разбить на лексемы, и разделителем. Для получения следующих лексем из строки достаточно передать функции единственный параметр – разделитель. Функция сохраняет собственный внутренний указатель на позицию в строке. Как правило, данная функция используется следующим образом:

$token = strtok($feedback, “ “);

echo $token.”<br>”;

while ($token! = “”)

{

$token = strtok(“ “);

echo $token.”<br>”;

};

При наличии в исходной строке двух следующих подряд разделителей функция будет возвращать пустую строку. Ее нельзя отличить от пустой строки, возвращаемой по достижению конца исходной строки. Кроме того, если одной из лексем является 0, функция также вернет пустую строку. Поэтому чаще лучше просто применять функцию explode().

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

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

Давайте рассмотрим примеры использования данной функции:

$test = “Your customer service is excellent”;

Если вызвать ее с положительным числом в качестве параметра начало, мы получим строку, начиная с позиции начало до конца строки. Например, substr($test, 1); возвращает строку “our customer service is excellent”. Нумерация позиций строки начинается с 0, как и в массивах.

substr($test, -9)

возвращает подстроку “excellent”. Параметр длина может использоваться для указания либо количества символов, которые должны быть возвращены (если он положителен), либо последнего символа, возвращаемой последовательности (если он отрицателен).