Главная страница
Навигация по странице:

  • Функции преобразования символов

  • RawUrlEncode(string $st)

  • RawUrlDecode(string $st)

  • StripSlashes(string $str)

  • AddSlashes(string $str)

  • Функции изменения регистра

  • Установка локали

  • SetLocale(string $category, string $locale)

  • Функции преобразования кодировок

  • Функции форматных преобразований строк

  • Хеш-код исходного пароля $pass_a: b>" . md5 ($ pass_a ). "

  • Хеш-код верифицируемого пароля $pass_b: b>" . md5 ($ pass_b ). "

  • Лабораторная работа 3. Разработка скриптов для генерации страниц


    Скачать 248.71 Kb.
    НазваниеЛабораторная работа 3. Разработка скриптов для генерации страниц
    Дата25.02.2019
    Размер248.71 Kb.
    Формат файлаdocx
    Имя файлаLab_03.docx
    ТипЛабораторная работа
    #68820
    страница4 из 7
    1   2   3   4   5   6   7
    "); // <span>Удалит все </span><span>html -</span><span> теги</span><span>,</span><span> кроме </span><span>html -</span><span> тегов </span><span><head></span><span> и</span><br /><br /><span><title></span><br /><br /><i><b>Функции для <a href="/dlya-raboti-s-fragmentom-nujno-predvariteleno-videlite/index.html" title="Для работы с фрагментом нужно предварительно выделить">работы с отдельными символами</a></b></i><br /><br />Как и в других языках программирования, в PHP можно работать с символами строк отдельно.<br /><br />Обратиться к любому символу строки можно по его индексу:<br /><br />$str = "PHP";
<br /><br /><span>echo $str[0]; // </span><span>Выводит</span><span> 'P'</span><br /><br />chr(int $code)<br /><br />Данная функция возвращает строку, состоящую из символа с кодом $code. Пример:<br /><br />echo chr(75); //Выводит K<br /><br /><i><b>ord($char)</b></i><br /><br />Данная функция возвращает код символа $char. Вот пример:<br /><br />echo ord('A'); // Выводит 65 - код буквы 'A'<br /><br /><i><b>Функции удаления пробелов</b></i><br /><br />Иногда трудно даже представить, какими могут быть странными пользователи, если дать им в руки клавиатуру и попросить напечатать на ней какое-нибудь слово. Так как клавиша пробела — самая большая, то пользователи имеют обыкновение нажимать ее в самые невероятные моменты. Этому способствует также и тот факт, что символ с кодом 32, обозначающий пробел, как вы знаете, на экране не виден. Если программа не способна обработать описанную ситуацию, то она, в лучшем случае после тягостного молчания отобразит в браузере что-нибудь типа "неверные входные данные", а в худшем — сделает при этом что-нибудь необратимое. Между тем, обезопасить себя от паразитных пробелов чрезвычайно просто, и разработчики PHP предоставляют нам для этого ряд специализированных функций. Не волнуйтесь о том, что их применение замедляет программу. Эти функции работают с молниеносной скоростью, а главное, одинаково быстро, независимо от объема переданных им строк.<br /><br /><i><b>trim(string $str)</b></i><br /><br />Возвращает копию $str, только с удаленными ведущими и концевыми пробельными символами. Под пробельными символами я здесь и далее подразумеваю: пробел " ", символ перевода строки \n, символ возврата каретки \r и символ табуляции \t. Например, вызов trim(" test\n ") вернет строку "test". Эта функция используется очень широко. Старайтесь применять ее везде, где есть хоть малейшее подозрение на наличие ошибочных пробелов. Поскольку работает она очень быстро.<br /><br /><i><b>ltrim(string $st)</b></i><br /><br />То же, что и trim(), только удаляет исключительно ведущие пробелы, а концевые не трогает. Используется гораздо реже.<br /><br /><i><b>chop(string $st)</b></i><br /><br />Удаляет только концевые пробелы, ведущие не трогает.<br /><br /><i><b><span id='Функции_преобразования_символов'>Функции преобразования символов</span></b></i><br /><br />Web-программирование — одна из тех областей, в которых постоянно приходится манипулировать строками: разрывать их, добавлять и удалять пробелы, перекодировать в разные кодировки, наконец, URL- кодировать идекодировать. В PHP <a href="/1-zdravstvujte-vi-mojete-udalyate-akcii-vruchnuyu-ili-cherez-x/index.html" title="1. Здравствуйте! Вы можете удалять акции вручную или через xls-шаблон сейчас всё объясню. Вручную: Откройте раздел Продвижение → Акции">реализовать все эти действия вручную</a>, используя только уже описанные примитивы, просто невозможно из соображений быстродействия. Поэтому-то и существуют подобные встроенные функции.<br /><br /><i><b>strtr(string $str, string $from, string $to)</b></i><br /><br />Эта функция применяется не столь широко, но все-таки иногда она бывает довольно полезной. Она заменяет в строке $str все символы, встречающиеся в $ from, на их "парные" (то есть расположенные в тех же позициях, что и во $from) из $to.<br /><br />Следующие несколько функций предназначены для быстрого URL-кодирования и декодирования.<br /><br />URL-кодирование необходимо для передачи данных через интернет. Например, такое кодирование целесообразно, если вы передаете русскоязычную информацию в качестве параметра скрипта. Также подобное кодирование можно выполнить и для файла, чтобы не возникало коллизий из-за отсутствия поддержки 8-битных кодировок некоторыми серверами. Вот эти функции:<br /><br /><i><b>UrlEncode(string $str)</b></i><br /><br />Функция URL-кодирует строку $str и возвращает результат. Эту функцию удобно применять, если вы, например, хотите динамически сформировать ссылку на какой-то сценарий, но не уверены, что его параметры содержат только алфавитно-цифровые символы. В этом случае воспользуйтесь функцией так:<br /><br />echo "<br />Теперь, даже если переменная $UserData включает символы =, & или даже <u>пробелы</u>, все равно сценарию будут переданы корректные данные.<br /><br /><i><b>UrlDecode(string $st)</b></i><br /><br />Производит URL-декодирование строки. В принципе, используется значительно реже, чем UrlEncode(), потому что PHP и так умеет перекодировать входные данные автоматически.<br /><br /><i><b><span id='RawUrlEncode(string_$st)'>RawUrlEncode(string $st)</span></b></i><br /><br />Почти полностью аналогична UrlEncode(), но только пробелы не преобразуются в <b>+</b>, как это делается при передаче данных из формы, а воспринимаются как обычные неалфавитно-цифровые символы. Впрочем, этот метод не порождает никаких дополнительных несовместимостей в коде.<br /><br /><i><b><span id='RawUrlDecode(string_$st)'>RawUrlDecode(string $st)</span></b></i><br /><br />Аналогична UrlDecode(), но не воспринимает <b>+</b> как пробел.<br /><br /><i><b>HtmlSpecialChars(string $str)</b></i><br /><br />Это функция, которая обычно используется в комбинации с echo. Основное ее назначение - гарантировать, что в выводимой строке ни один участок не будет воспринят как тэг. Заменяет в строке некоторые символы (такие как амперсант, кавычки и знаки "больше" и "меньше") на их HTML-эквиваленты, так, чтобы они выглядели на странице "самими собой". Самое типичное применение этой функции — формирование параметра value в различных элементах формы, чтобы не было никаких проблем с кавычками, или же вывод сообщения в гостевой книге, если вставлять тэги пользователю запрещено.<br /><br /><i><b><span id='StripSlashes(string_$str)'>StripSlashes(string $str)</span></b></i><br /><br />Заменяет в строке $str некоторые предваренные слэшем символы на их однокодовые эквиваленты. Это относится к следующим символам: <b>"</b>, <b>'</b>, <b>\</b> и никаким другим.<br /><br /><i><b><span id='AddSlashes(string_$str)'>AddSlashes(string $str)</span></b></i><br /><br />Вставляет слэши только перед следующими символами: ', " и \. Функцию очень удобно использовать при вызове <b>eval()</b> (эта <a href="/chto-takoe-funkciya-v2/index.html" title="Что такое функция?">функция выполняет строку</a>, переданную ей в параметрах, так, как будто имеет дело с небольшой PHP-программой.<br /><br /><i><b><span id='Функции_изменения_регистра'>Функции изменения регистра</span></b></i><br /><br />Довольно часто нам приходится переводить какие-то строки, скажем, в верхний регистр, т. е. делать все прописные буквы в строке заглавными. В принципе, для этой цели можно было бы воспользоваться функцией strtr(), рассмотренной выше, но она все же будет работать не так быстро, как нам иногда хотелось бы. В PHP есть функции, которые предназначены специально для таких нужд. Вот они:<br /><br /><i><b>strtolower(string $str)</b></i><br /><br />Преобразует строку в нижний регистр. Возвращает результат перевода.<br /><br />Надо заметить, что при неправильной настройке локали (это набор правил по переводу символов из одного регистра в другой, переводу даты и времени, денежных единиц и т. д.) функция будет выдавать неправильные результаты при работе с буквами кириллицы.<br /><br />Возможно, в несложных программах, а также если нет уверенности в поддержке соответствующей локали операционной системой, проще будет воспользоваться "ручным" преобразованием символов, задействуя функцию strtr():<br /><br />$st=strtr($st, "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩљЫЬЭЮЯ", <span>"</span><span>абвгдеёжзийклмнопрстуфхцчшщъыьэюя</span><span>");</span><br /><br />Главное достоинство данного способа — то, что в случае проблем с кодировкой для восстановления работоспособности сценария вам придется всего лишь преобразовать его в ту же кодировку, в которой у вас хранятся документы на сервере.<br /><br /><i><b>strtoupper(string $str)</b></i><br /><br />Переводит строку в верхний регистр. Возвращает результат преобразования. Эта функции также прекрасно работает со строками, составленными из латиницы, но с кирилицей может возникнуть все та же проблема.<br /><br /><i><b><span id='Установка_локали'>Установка локали </span></b></i><i><b>(</b></i><i><b>локальных настроек</b></i><i><b>)</b></i><br /><br />Локалью будем называть совокупность локальных настроек системы, таких как формат даты и времени, язык, кодировка.<br /><br />Настройки локали сильно зависят от операционной системы.<br /><br />Для установки локали используется функция SetLocale():<br /><br /><i><b><span id='SetLocale(string_$category,_string_$locale)'>SetLocale(string $category, string $locale)</span></b></i><br /><br />Функция устанавливает текущую локаль, с которой будут работать функции преобразования регистра символов, вывода даты-времени и.т.д. Вообще говоря, для каждой категории функций локаль определяется отдельно и выглядит по-разному. То, какую именно категорию функций затронет вызов SetLocale(), задается в параметре $category. Он может принимать следующие строковые значения:<br /><br />LC_CTYPE — активизирует указанную локаль для функций перевода в верх-' ний/нижний регистры;'<br /><br />LC_NUMERIC — активизирует локаль для функций форматирования дробных чи-' сел — а именно, задает <a href="/smeshannie-drobi-nepravilenaya-smeshannaya/index.html" title="Смешанные дроби Неправильная Смешанная">разделитель целой и дробной части в числах</a>;' LC_TIME — задает формат вывода даты и времени по умолчанию;' LC_ALL — устанавливает все вышеперечисленные режимы.'<br /><br />Теперь о параметре $locale. Как известно, каждая локаль, установленная в системе, имеет свое уникальное имя, по которому к ней можно обратиться. Именно оно и фиксируется в этом параметре. Однако, есть два важных исключения из этого правила. Во-первых, если величина $locale равна пустой строке "", то устанавливается та локаль, которая указана в глобальной переменной окружения с именем, совпадающим с именем категории $category (или LANG — она практически всегда присутствует в Unix). Во вторых, если в этом параметре передается 0, то новая локаль не устанавливается, а просто возвращается имя текущей локали для указанного режима.<br /><ul> <li><br />сожалению, имена локалей задаются при настройке операционной системы, и для них, по-видимому, не существует стандартов. Выясните у своего хостинг-провайдера, как называются локали для разных кодировок русских символов. Но, если следующий фрагмент работает у вашего хостинг-провайдера, это не означает, что он заработает, например, под Windows:<br /></ul> <br />setlocale('LC_CTYPE','ru_SU.KOI8-R'); <br /><br />Здесь вызов устанавливает таблицу замены регистра букв в соответствии с кодировкой KOI8-R. По правде говоря, локаль - вещь довольно непредсказуемая и довольно плохо переносимая между операционными системами. Так что, если ваш сценарий не очень велик, задумайтесь: возможно, лучше будет искать обходной путь, например, используя strtr(), а не рассчитывать на локаль.<br /><br /><i><b><span id='Функции_преобразования_кодировок'>Функции преобразования кодировок</span></b></i><br /><br />Часто встречается ситуация, когда нам требуется преобразовать строку из одной кодировки кириллицы в другую. Например, мы в программе сменили локаль: была кодировка windows, а стала — KOI8-R. Но строки-то остались по-прежнему в кодировке WIN-1251, а значит, для правильной работы с ними нам нужно их перекодировать в KOI8-R. Для этого и служит функция преобразования кодировок.<br /><br /><i><b>convert_cyr_string(string $str, char $from, char $to);</b></i><br /><br />Функция переводит строку $str из кодировки $from в кодировку $to. Конечно, это имеет смысл только для строк, содержащих "русские" буквы, т. к. латиница во всех кодировках выглядит одинаково. Разумеется, кодировка $from должна совпадать с истинной кодировкой строки, иначе результат получится неверным. Значения $from и $to — один символ, определяющий кодировку:<br /><br />k — koi8-r<br /><br />w — windows-1251<br /><br />i — iso8859-5<br /><ol type=a> <li><br />— x-cp866 d — x-cp866<br /></ol> <br />m — x-mac-cyrillic<br /><br />Функция <a href="/zakon-vstupaet-v-silu-cherez-10-dnej-posle-podpisaniya-a-znach/index.html" title="Закон вступает в силу через 10 дней после подписания, а значит достаточно небольшой срок для адаптации к координальным переменам">работает достаточно быстро</a>, так что ее вполне можно применять, скажем, для перекодировки писем в нужную форму перед их отправкой по электронной почте.<br /><br /><i><b><span id='Функции_форматных_преобразований_строк'>Функции форматных преобразований строк</span></b></i><br /><br />Как мы знаем, переменные в строках PHP интерполируются, поэтому практически всегда задача "смешивания" текста со значениями переменных не является проблемой. Например, мы можем спокойно написать что-то вроде:<br /><br />echo "Привет, $name! Вам $age лет.";<br /><br />В Си для аналогичных целей используется следующий код: printf("Привет, %s! Вам %s лет",name,age);<br /><br />Язык PHP также поддерживает ряд функций, использующих такой же синтаксис, как и их Си -эквиваленты. Бывают случаи, когда их применениедает наиболее красивое и лаконичное решение, хотя это и случается довольно нечасто.<br /><br />sprintf(string $format [, mixed args, ...])<br /><br />Эта функция — аналог функции sprintf() в Си. Она возвращает строку, составленную на основе строки форматирования, содержащей некоторые специальные символы, которые будут впоследствии заменены на значения соответствующих переменных из списка аргументов.<br /><br />Строка форматирования $format может включать в себя команды форматирования, предваренные символом %. Все остальные символы копируются в выходную строку как есть. Каждый спецификатор формата (то есть, символ % и следующие за ним команды) соответствует одному, и только одному параметру, указанному после параметра $format. Если же нужно поместить в текст % как обычный символ, необходимо его удвоить:<br /><br />echo sprintf("The percentage was %d%%",$percentage);<br /><br />Каждый спецификатор формата включает максимум пять элементов (в порядке их следования после символа %):<br /><ul> <li><br />Необязательный спецификатор размера поля, который указывает, сколько символов будет отведено под выводимую величину. В качестве символов-заполнителей (если значение имеет меньший размер, чем размер поля для его вывода) может использоваться пробел или 0, по умолчанию подставляется пробел. Можно задать любой другой символ-наполнитель, если указать его в строке форматирования, предварив апострофом '.<br /></ul> <br /><br /><ul> <li><br />Опциональный <a href="/otobrajaet-shagi-kotorie-algoritm-programmnogo-obespecheniya-c/index.html" title="Отображает шаги, которые алгоритм программного обеспечения ClustalW использует для глобального выравнивания">спецификатор выравнивания</a>, определяющий, будет результат выровнен по правому или по левому краю поля. По умолчанию производится выравнивание по правому краю, однако можно указать и левое выравнивание, задав символ - (минус).<br /></ul> <br /><br /><ul> <li><br />Необязательное число, определяющее размер поля для вывода величины. Если результат не будет в поле помещаться, то он "вылезет" за края этого поля, но не будет усечен.<br /></ul> <br /><br /><ul> <li><br />Необязательное число, предваренное точкой ".", предписывающее, сколько знаков после запятой будет в результирующей строке. Этот спецификатор учитывается только в том случае, если происходит вывод числа с плавающей точкой, в противном случае он игнорируется.<br /></ul> <br /><br /><ul> <li><br />Наконец, обязательный (заметьте — единственный обязательный!) спецификатор типа величины, которая будет помещена в выходную строку:<br /></ul> <br />b — очередной аргумент из списка выводится как двоичное целое число; c — выводится символ с указанным в аргументе кодом;' d — целое число;<br /><br />f — число с плавающей точкой;<br /><br />o — восьмеричное целое число;<br /><br />s — строка символов;<br /><br />x — шестнадцатеричное целое число с маленькими буквами a-z; X — шестнадцатеричное число с большими буквами A—Z.<br /><br />Вот как можно указать точность представления чисел с плавающей точкой:<br /><br />$money1 = 68.75;
<br /><br /><span>$money2 = 54.35;</span>
<br /><br /><span>$money = $money1 + $money2;</span>
<br /><br /><span>// echo $money </span><span>выведет</span><span> "123.1"...</span>
<br /><br /><span>$formatted = sprintf ("%01.2f", $money);</span>
<span> // echo $formatted </span><span>выведет</span><span> "123.10"</span><br /><br />Вот пример вывода целого числа, предваренного нужным количеством нулей:<br /><br />$isodate=sprintf("%04d-%02d-%02d",$year,$month,$day);<br /><br />printf(string $format [, mixed args, ...])<br /><br />Делает то же самое, что и sprintf(), только результирующая строка не возвращается, а направляется в браузер пользователя.<br /><br />number_format(float $number, int $decimals, string $dec_point=".", string $thousands_sep=",");<br /><br />Эта функция форматирует число с плавающей точкой с разделением его на триады с указанной точностью. Она может быть вызвана с двумя или четырьмя аргументами, но не с тремя! Параметр $decimals задает, сколько цифр после запятой должно быть у числа в выходной строке. Параметр $dec_point представляет <a href="/smeshannie-drobi-nepravilenaya-smeshannaya/index.html" title="Смешанные дроби Неправильная Смешанная">собой разделитель целой и дробной частей</a>, а параметр $thousands_sep — разделитель триад в числе (если указать на его месте пустую строку, то триады не отделяются друг от друга).<br /><br />В PHP существует еще несколько функций для выполнения форматных преобразований, среди них - <b>sscanf()</b> и <b>fscanf()</b>, которые часто применяются в Си. Однако в PHP их использование весьма ограничено: чаще всего для разбора строк оказывается гораздо выгоднее привлечь регулярные выражения или функцию <b>explode()</b>.<br /><br /><i><b>Хэш</b></i><i><b>-</b></i><i><b>функции</b></i><br /><br /><i><b>md5(string $str)</b></i><br /><br />Возвращает хэш-код строки $str, основанный на алгоритме корпорации RSA Data Security под названием "MD5 Message-Digest Algorithm". Хэш код — это просто строка, практически уникальная для каждой из строк $str. То есть вероятность того, что две разные строки, переданные в $str, дадут нам одинаковый хэш-код, стремится к нулю. Если длина строки $str может достигать нескольких тысяч символов, то ее MD5-код занимает максимум 32 символа. Для чего нужен хэш-код и, в частности, алгоритм MD5? Например, для проверки паролей на истинность.<br /><br />Пусть, к примеру, у нас есть система со многими пользователями, каждый из которых имеет свой пароль. Можно, конечно, хранить все эти пароли в обычном виде, или зашифровать их каким-нибудь способом, но тогда велика вероятность того, что в один прекрасный день этот файл с паролями у вас украдут.<br /><br />Сделаем так: в файле паролей будем хранить не сами пароли, а их (MD5) хэш-коды. При попытке какого либо пользователя войти в систему мы вычислим хэш-код только что введенного им пароля и сравним его с тем, который записан у нас в базе данных. Если коды совпадут, значит, все в порядке, а если нет — что ж, извините...<br /><br />Конечно, при вычислении хэш-кода какая-то часть информации о строке $str безвозвратно теряется. И именно это позволяет нам не опасаться, что злоумышленник, <a href="/laboratornaya-rabota-6-tema-raboti-izuchenie-sposobov-vzloma-p/index.html" title="Лабораторная работа №6 Тема работы: Изучение способов взлома паролей">получивший файл паролей</a>, сможет его когда-нибудь расшифровать. Ведь в нем нет самих паролей, нет даже их каких-то связных частей!<br /><br />Пример использования алгоритма хеширования MD5:<br /><br /><?php<br /><br />$pass_a = "MySecret";<br /><br />$pass_b = "MySecret";<br /><ul> <li><br />Выводим хеш-код строки MySecret ($pass_a) - <span>исходный пароль</span><br /></ul> <br />echo "<b>Хеш-код исходного пароля '$pass_a':</<br /><br /><span>b><b style=\"color:green\">"</span><span>.</span><span>md5</span><span>($</span><span>pass_a</span><span>).</span><span>"</b><br />"</span><span>;</span><br /><ul> <li><br />Выводим хеш-код строки MySecret ($pass_b) - <span>верифицируемый пароль</span><br /></ul> <br />echo "<b>Хеш-код верифицируемого пароля '$pass_b':</ <span>b><b style=\"color:green\">"</span><span>.</span><span>md5</span><span>($</span><span>pass_b</span><span>).</span><span>"</b><br />"</span><span>;</span><br /><ul> <li><br />Сравниваем хеш-<br /></ul> <br /><span>коды </span><span>MD5</span><span> исходного и верифицируемого пароля</span><br /><br />echo "</b></b>
    1   2   3   4   5   6   7


    написать администратору сайта