теория за редове, съдържащи html-код
Доста често публикувам код, съдържаш html-тагове. Кодът се обработва от браузъра и прави тези html-тагове невидими. Това му е предназначението, да интерпретира всички html-тагове в съответствие с стандартите на HTML. Съгласете се никак не е удобно, всеки път да ровим изходния код от "задната страна" на браузъра в желанието си да узнаем как са постигнати нещата. Налага се да покажем задния двор отпред, тоест, да публикувам html-таговете, така, че те да не бъдат форматирани. За целта умни хора са създали функция htmlspecialchars().Функция htmlspecialchars() приема три параметъра и по-обстойно за нея от документацията на PHP. Тази функция превежда специалните символи, например:
«<», «>», «&», «"» , «'»
в техните същности на език HTML, съответно:
«<», «>», «&», «"» , «'»
Трудно е да се нарече език, но това е тема за друг разговор и за собствено удобство нарушавам правилото..
Функция htmlspecialchars() прекодира най-често използваните спецсимволи. Ако се налага конвертиране на всички символи в техните HTNL същности се прибягва до функция htmlentities().
С думи прости, тази функция гарантира, че ако решите да напишете произволен код (php, javascript, html и т.н.), то той ще се изобрази нормално от браузъра, но няма да се изпълни.
практика - Profruit htmlspecialcharts конвертор
Първо създавам нов каталог в root директорията на Apache - /var/www/htmlspecialcharts и вътре помествам два php файла. Главен индекс, съдържащ формата и обработчик.Практическото изпълнение на конвертора. В ляв таб конвертитам кода, за да го публикувам тук в поредната си тема. Удобно, нали?
Код на индекс php файл
<?php session_start(); if(empty($_SESSION)){$_SESSION['msg'] = null;} ?> <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Конвертор</title> </head> <body bgcolor="#F7FBFC"> <h3>Въведи кода</h3> <form action="processor.php" method="POST"> <p><textarea cols="80" rows="20" name="msg"><?=$_SESSION['msg'] ?></textarea></p> <p><input type="submit" value="конвертирай"> <input type="button" value="изчисти" onClick="window.location.reload()"></p> </form> <?php unset($_SESSION['msg']); session_destroy(); ?> </body> </html>
Кодът, който виждате е благодарение на конвертора и това е идеята му, ОК? А от снимката над него придобивате представа как ще изглежда. Спартански вид и повече не е нужно, затова без стилове.
Замисълът е полето на формата да приема и пак там да връща. За целта ползвам сесия, която след визуализиране убивам. Бутон изчисти се управлява от JavaScript. Всяко натискане чисти напълно полето и презарежда страницата, така гарантирам чиста форма за пореден код. В самото начало проверявам глобален масив $_SESSION за съдържание и при липса, унищожавам променливата $_SESSION['msg'], после JavaScript и всичко ток, и жици.
Код на обработчик php файл
<?php session_start(); if (isset($_POST)){ $msg = trim($_POST['msg']); $msg = htmlspecialchars($msg); $msg = str_replace('&', '&', $msg); $msg = str_replace('&amp;', '&', $msg); $_SESSION['msg'] = $msg; header('Location: index.php'); exit; } else{ header('Location: index.php'); }Поредицата функции постигат желаното. С trim() режа празни символи, дошли от копиране. Резултата подавам на htmlspecialchars(). Тя връща същностите. Резултатът от нея не е достатъчен и необходима още една конвертация, която полагам на функция str_replace(). Презастраховам се от двойно натискане на бутон конвертирай и пак през същата функция с леки изменения. Защо? Защото това е домашно.
Крайният резултат закачаме на променлива $_SESSION['msg'] и пренасочваме обратно към индекса.
На печелившите честито. На мен браво!
до нови срещи ^.^
Благодаря на "Любчо Профруит" за добрите статии в блога !!
Тхумбс уп дето се казва . :)