Как и во всяком ремесле, в PHP существует масса всевозможных хитростей, ощутимо помогающих облегчить жизнь простого программиста. Вот некоторые из этих хитростей.
Трюк 1: передача массивов из формы.
Из HTML-формы можно передавать не только значения (переменные), но и массивы. Предположим, у нас есть форма со следующим полем:
При отправке данных из формы PHP-скрипт получит значение из поля cargo как переменную $cargo. Но если вместо "cargo" указать "cargo", то из поля будет отправлена скрипту уже не переменная, а массив $cargo, единственный элемент которого будет иметь единицу в качестве ключа и содержимое поля в качестве значения. При автоматическом формировании формы (скажем, при генерации прайс-листа со множеством наименований) — трюк поистине незаменимый, да и обработку массива скриптом куда проще организовать, чем анализ кучи переменных с названиями вроде tovar1, tovar2 и т. д.
Трюк 2: сокращённая форма записи условия в PHP.
Конструкцию...
echo "param=";~^~if($a==1)~^~{ echo "1"; }~^~else { echo "2"; }
Гораздо проще (и короче) изложить в сокращённой форме:
echo "param=".($a==1?"1":"2");
Трюк 3: анализ HTML-кнопок типа «submit».
HTML-кнопка «submit», как известно, отправляет данные HTML-формы серверу (в нашем случае на обработку PHP-скрипту). А как быть, если в форме нужны несколько кнопок, предусматривающих разные варианты обработки данных? Столкнувшись с этой задачей, почему-то мало кто вспоминает, что у кнопок типа «submit» есть собственный атрибут «value». Нет, конечно, всем известно, что этот атрибут выводит надпись на кнопке, иного же значения ему, как правило, не придают. Между тем в случае наличия у кнопок типа «submit» атрибута «name» текст подписей на кнопках отправляется из формы на сервер наряду с прочими данными и может быть проанализирован скриптом, что и позволит произвести столько разных обработок данных по нажатию разных кнопок типа «submit», сколько душе заблагорассудится. Преимущество трюка в том, что никаких полей типа «hidden» в этом случае не требуется.
Трюк 4: несуществующие параметры функций PHP.
Общеизвестно, что при обращении к функциям в PHP необходимо указывать ровно столько же переменных, сколько должна принимать функция:
$hour=16;~^~$minute=35;~^~echo today_is($hour,$minute);~^~...~^~function today_is($hour,$minute);~^~{~^~...~^~}
Куда менее известно, что для переменных в заголовке функции можно указывать значения по умолчанию (для использования в случае отсутствия значений переменных или самих переменных при обращении извне), что позволит обращаться к функции с любым количеством переменных или вообще не указывать их:
function today_is($hour=16,$minute=0)~^~{~^~...~^~}
Трюк 5: предотвращение кэширования JS-скриптов и CSS-стилей.
Сколько народу ежедневно ругается, изменив содержимое JS-скрипта или стилей CSS и обнаружив, что браузер прочно закешировал старую версию и ни в какую не желает показывать результаты работы новой. Особенно те, у кого в компании доступ в интернет осуществляется через прокси-сервер. Чего только не предпринимается в подобных случаях: в meta-раздел ставятся заголовки с истекшим сроком давности, meta-теги антикеширования и т. д. Между тем иногда достаточно поставить после упоминания соответствующего файла псевдопараметр в виде случайного числа, генерируемого коротеньким кусочком кода PHP:
Чтобы при открытии страницы всегда подгружалась исключительно свежая версия файла.
Трюк 6: кавычки, апострофы и интепретация текста.
К выбору контейнера для стринговых (текстовых) значений зачастую принято подходить несколько небрежно. А зря: многие забывают, что содержимое двойных текстовых кавычек (") интерпретатор PHP всегда анализирует на предмет наличия переменных, тогда как к содержимому контейнеров из одиночкых кавычек (апострофов) он абсолютно равнодушен, отображая их точно символ в символ без интерпретации.
Поэтому тексты с переменными удобнее заключать в неразрывные двойные кавычки:
$text="Здравствуйте, ${client}!";
Зато неудобочитаемый код с апострофами выполняется заметно быстрее, особенно в циклах:
$text=Здравствуйте, .$client.!;
Трюк 7: мгновенный вывод.
Ещё один отличный способ ускорить выполнение сценария — вместо того, чтобы немедленно и каждый раз выводить всё попавшееся под руку командой echo , накапливать тестовое содержимое в переменной, а затем вывести эту переменную один раз:
$mytext="variant 1";~^~$mytext.=" encode";~^~$mytext.=" access";~^~echo $mytext;
Обратите внимание, что операция конкатенации записана в сокращённом виде: $mytext.= , а не $mytext=$mytext. . Экономия времени — до десятикратного сокращения времени вывода. Впечатляет?
Трюк 8: передача массива из полей типа checkbox .
Трюк № 1 позволяет нам передавать из HTML-формы массивы. А в данном трюке проанализируем другую ситуацию: преположим, нам надо передать массив из формы, в которой есть только поля типа checkbox (это такой маленький квадратик, в котором при нажатии появляется галочка). К примеру, у нас имеется список городов, из которого пользователь может выбирать нужные ему города, но при отправке данных мы хотим отправлять не только идентификаторы выбранных пользователем городов, но и названия последних. А скрытые поля типа hidden рядом с чекбоксами нам делать очень не хочется (чтобы не утяжелять код страницы и массу отправляемых на сервер данных). Как быть?
Выход очень прост. Как известно, по умолчанию поле типа checkbox (вот такое, можете даже нажать на него: ) обычно может иметь значение «on» (поле выбрано, то есть в нём стоит галочка) или «off» (поле не выбрано). Для поля также можно указать альтернативное значение, например, 1. Однако далеко не все задумываются о том, что для этого поля можно указать вообще любое значение, да хоть текст романа «Война и мир». И это значение будет аккуратно передано серверным скриптам на анализ и обработку:
Пользователь выбирает нужные пункты, нажимает кнопку «Отправить», и на сервер отправляется массив из выбранных чекбоксов, в котором опция name чекбоксов является названием переменной, а опция value — её значением. Применительно к PHP это равнозначно строке:
$id548=Toyota Landcruiser;
А теперь снова вспомним про трюк № 1. Предположим, мы не хотим анализировать кучу переменных, а хотим вместо этого проанализировать один-единственный массив. Тоже несложно:
И в результате появления двух квадратных скобок вокруг цифры в аргументе опции name чекбокса на сервер отправляется уже не переменная $id548 , а элемент массива $id с ключом 548.
Итог? Весьма неплохой: из одного чекбокса мы передали серверу аж целых три параметра — наименование массива, ключ элемента и его значение, безо всяких дополнительных скрытых полей и лишнего HTML-кода.
I can’t use PHP in my HTML pages. For example, index.html . I’ve tried using both:
contents ?>
Neither of these work. My server offers PHP, and when I use a the .php extension, it works properly. Is this a problem or do I have to change the preferences in php.ini ?
You can’t run PHP in .html files because the server does not recognize that as a valid PHP extension unless you tell it to. To do this you need to create a .htaccess file in your root web directory and add this line to it:
AddType application/x-httpd-php .htm .html
This will tell Apache to process files with a .htm or .html file extension as PHP files.
I think writing PHP into an .html file is confusing and anti-natural. Why would you do that??
Anyway, if what you want is to execute PHP files and show them as .html in the address bar, an easiest solution would be using .php as normal, and write a rule in your .htaccess like this:
RewriteRule ^([^.]+)\.html$ $1.php [L]
In order to use php in .html files, you must associate them with your PHP processor in your HTTP server’s config file. In Apache, that looks like this:
AddHandler application/x-httpd-php .html
You can modify .htaccess like others said, but the fastest solution is to rename the file extension to .php
For having .html files parsed as well, you need to set the appropriate handler in your server config.
For Apache httpd 2.X this is the following line
AddHandler application/x-httpd-php .html
(PHP 4, PHP 5, PHP 7)
htmlspecialchars — Преобразует специальные символы в HTML-сущности
Описание
String htmlspecialchars (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]])
В HTML некоторые символы имеют особый смысл и должны быть представлены в виде HTML сущностей, чтобы сохранить их значение. Эта функция возвращает строку, над которой проведены эти преобразования. Если вам нужно преобразовать все возможные сущности, используйте htmlentities() .
Если входная строка переданная в эту функцию и результирующий документ используют одинаковую кодировку символов, то этой функции достаточно, чтобы подготовить данные для вставки в большинство частей HTML документа. Однако, если данные содержат символы, не определенные в кодировке символов результирующего документа и вы ожидаете сохранения этих символов (как числовые или именованные сущности), то вам недостаточно будет этой и htmlentities() функций (которые только преобразуют подстроки с соответствующими сущностями). Необходимо использовать функцию mb_encode_numericentity() .
Производятся следующие преобразования:
- "&" (амперсанд) преобразуется в "&"
- """ (двойная кавычка) преобразуется в """ в режиме ENT_NOQUOTES is not set.
- """ (одиночная кавычка) преобразуется в """ (или ") только в режиме ENT_QUOTES .
- "<" (знак "меньше чем") преобразуется в "<"
- ">" (знак "больше чем") преобразуется в ">"
Список параметров
Конвертируемая строка (string ).
Битовая маска из нижеуказанных флагов, определяющих режим обработки кавычек, некорректных кодовых последовательностей и используемый тип документа. По умолчанию используется ENT_COMPAT | ENT_HTML401 .
Название константы | Описание |
---|---|
ENT_COMPAT | Преобразует двойные кавычки, одинарные кавычки не изменяются. |
ENT_QUOTES | Преобразует как двойные, так и одинарные кавычки. |
ENT_NOQUOTES | Оставляет без изменения как двойные, так и одинарные кавычки. |
ENT_IGNORE | Без всяких уведомительных сообщений отбрасывает некорректные кодовые последовательности вместо возврата пустой строки. Использование этого флага не рекомендуется, так как это может привести к » негативным последствиям, связанным с безопасностью . |
ENT_SUBSTITUTE | Заменяет некорреткные кодовые последовательности символом замены Юникода U+FFFD в случае использования UTF-8 и FFFD; при использовании другой кодировки, вместо возврата пустой строки. |
ENT_DISALLOWED | Заменяет неверные коды символов для заданного типа документа символом замены юникода U+FFFD (UTF-8) или FFFD; (при использовании другой кодировки) вместо того, чтобы оставлять все как есть. Это может быть полезно, например, для того, чтобы убедиться в формальной правильности XML-документов со встроенным внешним контентом. |
ENT_HTML401 | Обработка кода в соответствии с HTML 4.01. |
ENT_XML1 | Обработка кода в соответствии с XML 1. |
ENT_XHTML | Обработка кода в соответствии с XHTML. |
ENT_HTML5 | Обработка кода в соответствии с HTML 5. |
Необязательный аргумент определяющий кодировку, используемую при конвертации симоволов.
Если не указан, то значением по умолчанию для encoding зависит от используемой версии PHP. В PHP 5.6 и старше, для значения по умолчанию используется конфигурационная опция default_charset . В PHP 5.4 и 5.5 используется UTF-8 по умолчанию. Более ранние версии PHP используют ISO-8859-1 .
Хотя этот аргумент является технически необязательным, настоятельно рекомендуется указать правильное значение для вашего кода, если вы используете PHP 5.5 или выше, или если ваша опция конфигурации default_charset может быть задана неверно для входных данных.
Для целей этой функции кодировки ISO-8859-1 , ISO-8859-15 , UTF-8 , cp866 , cp1251 , cp1252 и KOI8-R являются практически эквивалентными, предполагая то, что сама строка string содержит корректные символы в указанной кодировке, то символы, изменяемые htmlspecialchars() , останутся на тех же местах во всех этих кодировках.
Поддерживаются следующие кодировки:
Кодировка | Псевдонимы | Описание |
---|---|---|
ISO-8859-1 | ISO8859-1 | Западно-европейская Latin-1. |
ISO-8859-5 | ISO8859-5 | Редко используемая кириллическая кодировка (Latin/Cyrillic). |
ISO-8859-15 | ISO8859-15 | Западно-европейская Latin-9. Добавляет знак евро, французские и финские буквы к кодировке Latin-1(ISO-8859-1). |
UTF-8 | 8-битная Unicode, совместимая с ASCII. | |
cp866 | ibm866, 866 | Кириллическая кодировка, применяемая в DOS. |
cp1251 | Windows-1251, win-1251, 1251 | Кириллическая кодировка, применяемая в Windows. |
cp1252 | Windows-1252, 1252 | Западно-европейская кодировка, применяемая в Windows. |
KOI8-R | koi8-ru, koi8r | Русская кодировка. |
BIG5 | 950 | Традиционный китайский, применяется в основном на Тайване. |
GB2312 | 936 | Упрощенный китайский, стандартная национальная кодировка. |
BIG5-HKSCS | Расширенная Big5, применяемая в Гонг-Конге. | |
Shift_JIS | SJIS, SJIS-win, cp932, 932 | Японская кодировка. |
EUC-JP | EUCJP, eucJP-win | Японская кодировка. |
MacRoman | Кодировка, используемая в Mac OS. | |
"" | Пустая строка активирует режим определения кодировки из файла скрипта (Zend multibyte), default_charset и текущей локали (см. nl_langinfo() и setlocale() ), в указанном порядке. Не рекомендуется к использованию. |
double_encodeЗамечание : Остальные кодировки не поддерживаются, вместо них будет применена кодировка по умолчанию и сгенерировано предупреждение.
Если параметр double_encode выключен, то PHP не будет преобразовывать существующие html-сущности. По умолчанию преобразуется все без ограничений.
20.6KPHP — это встраиваемый серверный язык программирования. Большая часть его синтаксиса заимствована из C , Java и Perl . А также добавлена пара уникальных характерных только для PHP функций . Основная цель этого языка — создание динамически генерируемых PHP HTML страниц .
PHP в HTML
При создании сложных веб-страниц вы столкнетесь с необходимостью объединить PHP и HTML для реализации конкретных задач. На первый взгляд это может показаться сложным, так как PHP и HTML являются двумя независимыми дисциплинами, но это не так. PHP предназначен для взаимодействия с HTML , и его код может быть включен в разметку страницы.
В HTML-страницы PHP-код включается с помощью специальных тегов. Когда пользователь открывает страницу, сервер обрабатывает PHP-код , а затем отправляет результат обработки (не сам PHP-код ) в браузер.
HTML и PHP довольно просто объединить. Любая часть PHP-скрипта за пределами тегов игнорируется PHP-компилятором и передается непосредственно в браузер. Если посмотреть на пример, приведенный ниже, то можно увидеть, что полный PHP-скрипт может выглядеть следующим образом:
Привет, сегодня .