Я нахожусь в середине создания окна комментариев, где люди могут задавать свои вопросы.
Я получаю много людей, спрашивающих, как они делают что-то, что подразумевает ввод кода в форму.
Форма проходит через htmlpurifier, чтобы убедиться, что он безопасен в использовании.
Но когда кто-то вводит эхо-коды и т. Д., Это не позволяет. Или, если кто-то вводит div, он также не позволяет этого, даже если он упакован в <code>.
Например, это:
<code><div class="classname"></div></code>
просто добавит div.
а также
<code><?php echo $word; ?></code>
Не показывать код вообще.
Как я установил это htmlpurifier:
$content = $_POST['comment']; $rawf = str_replace('<code>', '<pre><code>', $content); $rawfp = str_replace('</code>', '</code></pre>', $rawf); require_once '../Libs/htmlPurifier/library/HTMLPurifier.auto.php'; $purifierconfig = HTMLPurifier_Config::createDefault(); $purifierconfig->set('HTML.Allowed', 'b,a[href],i,em,br,code,pre'); $purifier = new HTMLPurifier($purifierconfig); $clean_html = $purifier->purify($rawfp); $ticketpost = str_replace('<a ', '<a rel="nofollow" ', $clean_html);
Затем $ ticketpost вставляется в базу данных с помощью подготовленных инструкций PDO.
Есть ли что-то, чего я не делаю, или что-то не так?
Если так, пожалуйста, не могли бы вы помочь.
благодаря
Ваша проблема заключается в том, что если вход по-настоящему HTML, то для вывода в результате любых фрагментов кода необходимо экранировать. У нас есть специальный синтаксис <![CDATA[ put code here ]]>
для этого, но иногда вы не хотите беспокоить пользователей таким синтаксисом. В этом случае вы можете сделать preg_replace_callback на тегах кода, где обратный вызов пропускает код между двумя тегами кода. Но обратите внимание, теперь нет способа выразить фрагмент кода, содержащий теги кода! Так что это все компромиссы.