protected function validateFields() { require_once MODX_CORE_PATH . 'components/util/jevix.class.php'; $jevix = new Jevix(); $fields = $this->getFields(); foreach ($fields as $field => $d) { if (!$d['noparse']) { $s = $this->getProperty($field); $f = $jevix->parse($s, $parse_error); //пропарсить поле if (empty($parse_error)) { $this->setProperty($field, $f); } else { $this->addFieldError($field, implode(', ', $parse_error)); continue; } } if ($d['required'] && !$this->getProperty($field)) { $error = !empty($d['error_message']) ? $d['error_message'] : 'Поле заполненно не корректно'; $this->addFieldError($field, $error); continue; } switch ($field) { case 'email': if (!preg_match('/^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$/', $this->getProperty($field))) { $this->addFieldError($field, 'Укажите корректный емейл'); } break; default: } } return !$this->hasErrors(); }
function comments_add() { $parent_id = (int) $_POST['parent_id']; $author = mysql_escape_string($_POST['author']); $email = mysql_escape_string($_POST['email']); $jevix = new Jevix(); $jevix->cfgAllowTags(array('p', 'blockquote', 'cite', 'b', 'i', 'br')); $text = $jevix->parse($_POST['text']); $text = mysql_escape_string($text); $hash = mysql_escape_string($_POST['hash']); if (!$author) { return '{"error":"empty_author"}'; } if (!$email) { return '{"error":"empty_email"}'; } if (!$text) { return '{"error":"empty_text"}'; } setcookie('cmt_name', $_POST['author'], time() + 86400 * 365); setcookie('cmt_email', $_POST['email'], time() + 86400 * 365); $_COOKIE['cmt_name'] = $_POST['author']; $_COOKIE['cmt_email'] = $_POST['email']; $sql = "\n\t\tINSERT INTO prefix_comments\n\t\t(parent_id, hash, author, email, text)\n\t\tVALUES ({$parent_id}, '{$hash}', '{$author}', '{$email}', '{$text}')"; db()->query($sql); return comments_block($hash, true); }
/** * Парсинг текста с помощью Jevix * * @param string $sText * @param array $aError * @return string */ public function JevixParser($sText,&$aError=null) { // Если конфиг пустой, то загружаем его if (!count($this->oJevix->tagsRules)) { $this->LoadJevixConfig(); } $sResult=$this->oJevix->parse($sText,$aError); return $sResult; }
public function parse($sText, &$aError = null) { $sText = $this->FlashParamParser($sText); $sText = parent::parse($sText, $aError); $sText = $this->VideoParser($sText); $sText = $this->CodeSourceParser($sText); return $sText; }
<?php /** * Тестовый пример работы Jevix-а * * За помощь в написании примера спасибо Александру (http://vaart.habrahabr.ru, indrid@mail.ru) */ require '../jevix.class.php'; $jevix = new Jevix(); //Конфигурация // 1. Устанавливаем разрешённые теги. (Все не разрешенные теги считаются запрещенными.) $jevix->cfgAllowTags(array('a', 'img', 'i', 'b', 'u', 'em', 'strong', 'nobr', 'li', 'ol', 'ul', 'sup', 'abbr', 'pre', 'acronym', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'adabracut', 'br', 'code', 'video')); // 2. Устанавливаем коротие теги. (не имеющие закрывающего тега) $jevix->cfgSetTagShort(array('br', 'img')); // 3. Устанавливаем преформатированные теги. (в них все будет заменятся на HTML сущности) $jevix->cfgSetTagPreformatted(array('pre')); // 4. Устанавливаем теги, которые необходимо вырезать из текста вместе с контентом. $jevix->cfgSetTagCutWithContent(array('script', 'object', 'iframe', 'style')); // 5. Устанавливаем разрешённые параметры тегов. Также можно устанавливать допустимые значения этих параметров. $jevix->cfgAllowTagParams('a', array('title', 'href')); $jevix->cfgAllowTagParams('img', array('src', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int')); // 6. Устанавливаем параметры тегов являющиеся обязяательными. Без них вырезает тег оставляя содержимое. $jevix->cfgSetTagParamsRequired('img', 'src'); $jevix->cfgSetTagParamsRequired('a', 'href'); // 7. Устанавливаем теги которые может содержать тег контейнер // cfgSetTagChilds($tag, $childs, $isContainerOnly, $isChildOnly) // $isContainerOnly : тег является только контейнером для других тегов и не может содержать текст (по умолчанию false) // $isChildOnly : вложенные теги не могут присутствовать нигде кроме указанного тега (по умолчанию false) //$jevix->cfgSetTagChilds('ul', 'li', true, false); // 8. Устанавливаем атрибуты тегов, которые будут добавлятся автоматически $jevix->cfgSetTagParamDefault('a', 'rel', null, true);
<?php /** * Тестовый пример работы Jevix-а * * За помощь в написании примера спасибо Александру (http://vaart.habrahabr.ru, indrid@mail.ru) */ require '../jevix.class.php'; $jevix = new Jevix(); //Конфигурация // 1. Устанавливаем разрешённые теги. (Все не разрешенные теги считаются запрещенными.) $jevix->cfgAllowTags(array('a', 'img', 'i', 'b', 'u', 'em', 'strong', 'nobr', 'li', 'ol', 'ul', 'sup', 'abbr', 'pre', 'acronym', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'adabracut', 'br', 'code')); // 2. Устанавливаем коротие теги. (не имеющие закрывающего тега) $jevix->cfgSetTagShort(array('br', 'img')); // 3. Устанавливаем преформатированные теги. (в них все будет заменятся на HTML сущности) $jevix->cfgSetTagPreformatted(array('pre')); // 4. Устанавливаем теги, которые необходимо вырезать из текста вместе с контентом. $jevix->cfgSetTagCutWithContent(array('script', 'object', 'iframe', 'style')); // 5. Устанавливаем разрешённые параметры тегов. Также можно устанавливать допустимые значения этих параметров. $jevix->cfgAllowTagParams('a', array('title', 'href')); $jevix->cfgAllowTagParams('img', array('src', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int')); // 6. Устанавливаем параметры тегов являющиеся обязяательными. Без них вырезает тег оставляя содержимое. $jevix->cfgSetTagParamsRequired('img', 'src'); $jevix->cfgSetTagParamsRequired('a', 'href'); // 7. Устанавливаем теги которые может содержать тег контейнер // cfgSetTagChilds($tag, $childs, $isContainerOnly, $isChildOnly) // $isContainerOnly : тег является только контейнером для других тегов и не может содержать текст (по умолчанию false) // $isChildOnly : вложенные теги не могут присутствовать нигде кроме указанного тега (по умолчанию false) //$jevix->cfgSetTagChilds('ul', 'li', true, false); // 8. Устанавливаем атрибуты тегов, которые будут добавлятся автоматически $jevix->cfgSetTagParamDefault('a', 'rel', null, true);
/** * Создание сниппета * * @param string $sText * * @return string */ protected function _makeSnippet($sText) { $aError = array(); $sRegexp = $this->_preparePattern(); // * Если задано, то вырезаем все теги if ($this->bSkipAllTags) { $sText = strip_tags($sText); } else { $sText = $this->oJevix->parse($sText, $aError); $sText = str_replace('<br/>', '', $sText); } //$sText = str_replace(' ', ' ', $sText); if (mb_preg_match_all($sRegexp, $sText, $aMatches, PREG_OFFSET_CAPTURE)) { // * Создаем набор фрагментов текста $sSnippet = ''; $aFragmentSets = array(); $nFragmentSetsCount = -1; $nCount = 0; $aLastSet = array(); $nLastLen = 0; foreach ($aMatches[0] as $aMatch) { $sFrTxt = $aMatch[0]; $nFrPos = $aMatch[1]; $nFrLen = mb_strlen($sFrTxt); // Создаем сеты фрагментов, чтобы близлежащие слова попали в один сет if ($nFragmentSetsCount == -1 || $nLastLen == 0) { $aLastSet = array('txt' => $sFrTxt, 'pos' => $nFrPos, 'len' => $nFrLen); $nLastLen = $nFrPos + $nFrLen; $aFragmentSets[++$nFragmentSetsCount][] = $aLastSet; } else { if ($nFrPos + $nFrLen - $aLastSet['pos'] < $this->nShippetLength) { $aFragmentSets[$nFragmentSetsCount][] = array('txt' => $sFrTxt, 'pos' => $nFrPos, 'len' => $nFrLen); $nLastLen = $nFrPos + $nFrLen - $aLastSet['pos']; } else { $aLastSet = array('txt' => $sFrTxt, 'pos' => $nFrPos, 'len' => $nFrLen); $nLastLen = $nFrPos + $nFrLen; $aFragmentSets[++$nFragmentSetsCount][] = $aLastSet; } } } $aFragments = array(); $nPos = 0; foreach ($aFragmentSets as $aSet) { $nLen = 0; foreach ($aSet as $aWord) { if ($nLen == 0) { $nLen = $aWord['len']; $nPos = $aWord['pos']; } else { $nLen = $aWord['pos'] + $aWord['len'] - $nPos; } } $aFragments[] = $this->_makeSnippetFragment($sText, $aSet, $nPos, $nLen); if ($this->nSnippetMaxFragments > 0 && ++$nCount >= $this->nSnippetMaxFragments) { break; } } foreach ($aFragments as $sFragment) { $sSnippet .= $this->sSnippetBeforeFragment . $sFragment . $this->sSnippetAfterFragment; } } else { if (mb_strlen($sText) > $this->nShippetMaxLength) { $sSnippet = mb_substr($sText, 0, $this->nShippetMaxLength) . '…'; } else { $sSnippet = $sText; } } return $sSnippet; }
private function getJevix($is_auto_br, $build_redirect_link) { cmsCore::loadLib('jevix.class', 'Jevix'); $jevix = new Jevix(); // Устанавливаем разрешённые теги. (Все не разрешенные теги считаются запрещенными.) $jevix->cfgAllowTags(array('p', 'br', 'span', 'div', 'a', 'img', 'b', 'i', 'u', 's', 'del', 'em', 'strong', 'sup', 'sub', 'hr', 'font', 'ul', 'ol', 'li', 'table', 'tbody', 'thead', 'tfoot', 'tr', 'td', 'th', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'pre', 'code', 'blockquote', 'video', 'audio', 'youtube', 'facebook', 'object', 'param', 'embed', 'iframe')); // Устанавливаем коротие теги. (не имеющие закрывающего тега) $jevix->cfgSetTagShort(array('br', 'img', 'hr', 'embed')); // Устанавливаем преформатированные теги. (в них все будет заменятся на HTML сущности) $jevix->cfgSetTagPreformatted(array('pre', 'video')); // Устанавливаем теги, которые необходимо вырезать из текста вместе с контентом. $jevix->cfgSetTagCutWithContent(array('script', 'style', 'meta')); $jevix->cfgSetTagIsEmpty(array('param', 'embed', 'a', 'iframe', 'div')); // Устанавливаем разрешённые параметры тегов. Также можно устанавливать допустимые значения этих параметров. $jevix->cfgAllowTagParams('a', array('href' => '#link', 'name' => '#text', 'target' => '#text', 'class' => '#text')); $jevix->cfgAllowTagParams('img', array('src', 'style' => '#text', 'alt' => '#text', 'title' => '#text', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int', 'class' => '#text')); $jevix->cfgAllowTagParams('span', array('style' => '#text')); $jevix->cfgAllowTagParams('object', array('width' => '#int', 'height' => '#int', 'data' => array('#domain' => array('youtube.com', 'rutube.ru', 'vimeo.com', 'vk.com')), 'type' => '#text')); $jevix->cfgAllowTagParams('param', array('name' => '#text', 'value' => '#text')); $jevix->cfgAllowTagParams('embed', array('src' => array('#domain' => array('youtube.com', 'rutube.ru', 'vimeo.com', 'vk.com')), 'type' => '#text', 'allowscriptaccess' => '#text', 'allowfullscreen' => '#text', 'width' => '#int', 'height' => '#int', 'flashvars' => '#text', 'wmode' => '#text')); $jevix->cfgAllowTagParams('iframe', array('width' => '#int', 'height' => '#int', 'style' => '#text', 'frameborder' => '#int', 'allowfullscreen' => '#text', 'src' => array('#domain' => array('youtube.com', 'rutube.ru', 'vimeo.com', 'vk.com', 'my.mail.ru', 'facebook.com')))); $jevix->cfgAllowTagParams('table', array('width' => '#int', 'height' => '#int', 'cellpadding' => '#int', 'cellspacing' => '#int', 'border' => '#int', 'style' => '#text', 'align' => '#text', 'valign' => '#text')); $jevix->cfgAllowTagParams('td', array('width' => '#int', 'height' => '#int', 'style' => '#text', 'align' => '#text', 'valign' => '#text', 'colspan' => '#int', 'rowspan' => '#int')); $jevix->cfgAllowTagParams('th', array('width' => '#int', 'height' => '#int', 'style' => '#text', 'align' => '#text', 'valign' => '#text', 'colspan' => '#int', 'rowspan' => '#int')); $jevix->cfgAllowTagParams('p', array('style' => '#text')); $jevix->cfgAllowTagParams('div', array('style' => '#text', 'class' => '#text')); // Устанавливаем параметры тегов являющиеся обязательными. Без них вырезает тег оставляя содержимое. $jevix->cfgSetTagParamsRequired('img', 'src'); $jevix->cfgSetTagParamsRequired('a', 'href'); // Устанавливаем теги которые может содержать тег контейнер $jevix->cfgSetTagChilds('ul', array('li'), false, true); $jevix->cfgSetTagChilds('ol', array('li'), false, true); $jevix->cfgSetTagChilds('table', array('tr', 'tbody', 'thead', 'tfoot', 'th', 'td'), false, true); $jevix->cfgSetTagChilds('tbody', array('tr', 'td', 'th'), false, true); $jevix->cfgSetTagChilds('thead', array('tr', 'td', 'th'), false, true); $jevix->cfgSetTagChilds('tfoot', array('tr', 'td', 'th'), false, true); $jevix->cfgSetTagChilds('tr', array('td'), false, true); $jevix->cfgSetTagChilds('tr', array('th'), false, true); // Устанавливаем автозамену $jevix->cfgSetAutoReplace(array('+/-', '(c)', '(с)', '(r)', '(C)', '(С)', '(R)'), array('±', '©', '©', '®', '©', '©', '®')); // включаем режим замены переноса строк на тег <br/> $jevix->cfgSetAutoBrMode($is_auto_br); // включаем режим автоматического определения ссылок $jevix->cfgSetAutoLinkMode(true); // если нужно обрабатывать внешние ссылки в редирект if ($build_redirect_link) { $jevix->cfgSetTagCallbackFull('a', array($this, 'linkRedirectPrefix')); } // Отключаем типографирование в определенном теге $jevix->cfgSetTagNoTypography('pre', 'youtube', 'iframe'); // Ставим колбэк для youtube $jevix->cfgSetTagCallbackFull('youtube', array($this, 'parseYouTubeVideo')); // Ставим колбэк для facebook $jevix->cfgSetTagCallbackFull('facebook', array($this, 'parseFacebookVideo')); // Ставим колбэк на iframe $jevix->cfgSetTagCallbackFull('iframe', array($this, 'parseIframe')); // Ставим колбэк для кода $jevix->cfgSetTagCallback('code', array($this, 'parseCode')); return $jevix; }
protected function _getJevix() { require_once 'jevix.class.php'; $jevix = new Jevix(); /* Устанавливаем разрешённые теги (все остальные - запрещенные) */ $jevix->cfgAllowTags(array('img', 'code', 'pre')); /* Устанавливаем коротие теги (не имеющие закрывающего тега) */ $jevix->cfgSetTagShort(array('img')); /* Устанавливаем преформатированные теги (в них всё будет заменятся на HTML-сущности) */ $jevix->cfgSetTagPreformatted(array('pre')); /* Устанавливаем теги, которые необходимо вырезать из текста вместе с контентом */ $jevix->cfgSetTagCutWithContent(array('script', 'object', 'iframe', 'style')); /* Устанавливаем разрешённые параметры тегов и их допустимые значения */ $jevix->cfgAllowTagParams('img', array('src', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int')); /* Устанавливаем параметры тегов являющиеся обязяательными, без них вырезает тег, оставляя содержимое */ $jevix->cfgSetTagParamsRequired('img', 'src'); /* Включаем режим XHTML (по умолчанию включен) */ $jevix->cfgSetXHTMLMode(true); /* Включаем режим замены переноса строк на тег <br/>. (по умолчанию включен) */ $jevix->cfgSetAutoBrMode(true); /* Выключаем режим автоматического определения ссылок. (по умолчанию включен) */ $jevix->cfgSetAutoLinkMode(false); /* Отключаем типографирование в определенном теге */ $jevix->cfgSetTagNoTypography('code'); return $jevix; }
/** * @param string $sText * @param array $aErrors * * @return string */ public function Parse($sText, &$aErrors) { return parent::parse($sText, $aErrors); }
<?php /** @var array $scriptProperties */ /** @var Jevix $Jevix */ if (!$modx->loadClass('jevix', MODX_CORE_PATH . 'components/jevix/model/jevix/', false, true)) { return 'Could not load Jevix!'; } $Jevix = new Jevix($modx, $scriptProperties); return $Jevix->process($scriptProperties['input']);
/** * Удаляет из строки все теги, используется как аналог strip_tags там, * где последний удаляет часть текста вместе с не валидными тегами, например * при обработке строки ">>> Hello <<<". Подробнее в задаче #151 * {@see https://github.com/altocms/altocms/issues/151} * * @param $sText * @param null $aError * @return string */ public function RemoveAllTags($sText, &$aError = null) { F::File_IncludeLib('Jevix/jevix.class.php'); /** @var Jevix $oJevix */ $oJevix = new Jevix(); return htmlspecialchars_decode($oJevix->parse($sText, $aError)); }
private static function checkByJevix($text, $autolink = true) { $jevix = new Jevix(); //Конфигурация if (user::isAdmin()) { // Администратору доверяем больше, разрешаем ему втавлять потенциально опасные теги - object, param, embed, video, iframe // 1. Устанавливаем разрешённые теги. (Все не разрешенные теги считаются запрещенными.) $jevix->cfgAllowTags(array('table', 'tr', 'td', 'th', 'p', 'a', 'img', 'i', 'b', 'u', 'em', 'strong', 'nobr', 'li', 'ol', 'ul', 'sup', 'abbr', 'pre', 'acronym', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'adabracut', 'br', 'code', 'div', 'span', 'object', 'param', 'embed', 'video', 'code', 'iframe', 'hr')); // 2. Устанавливаем коротие теги. (не имеющие закрывающего тега) $jevix->cfgSetTagShort(array('br', 'img', 'param', 'embed', 'hr')); // 3. Устанавливаем преформатированные теги. (в них все будет заменятся на HTML сущности) $jevix->cfgSetTagPreformatted(array('pre')); // 4. Устанавливаем теги, которые необходимо вырезать из текста вместе с контентом. $jevix->cfgSetTagCutWithContent(array('script', 'javascript', 'style', 'applet')); // 5. Устанавливаем разрешённые параметры тегов. Также можно устанавливать допустимые значения этих параметров. $jevix->cfgAllowTagParams('div', array('class', 'id', 'style')); $jevix->cfgAllowTagParams('p', array('style')); $jevix->cfgAllowTagParams('h1', array('style')); $jevix->cfgAllowTagParams('h2', array('style')); $jevix->cfgAllowTagParams('h3', array('style')); $jevix->cfgAllowTagParams('h4', array('style')); $jevix->cfgAllowTagParams('h5', array('style')); $jevix->cfgAllowTagParams('h6', array('style')); $jevix->cfgAllowTagParams('span', array('class', 'id', 'style')); $jevix->cfgAllowTagParams('a', array('title', 'href', 'target', 'class', 'id', 'rel', 'style')); $jevix->cfgAllowTagParams('img', array('style', 'src', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center'), 'width' => '#text', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int')); $jevix->cfgAllowTagParams('table', array('border', 'class', 'width', 'align', 'valign', 'style', 'id')); $jevix->cfgAllowTagParams('tr', array('height', 'class', 'style')); $jevix->cfgAllowTagParams('td', array('colspan', 'rowspan', 'class', 'width', 'height', 'align', 'valign', 'style')); $jevix->cfgAllowTagParams('th', array('colspan', 'rowspan', 'class', 'width', 'height', 'align', 'valign', 'style')); $jevix->cfgAllowTagParams('object', array('width' => '#text', 'height')); $jevix->cfgAllowTagParams('param', array('name', 'value')); $jevix->cfgAllowTagParams('embed', array('src', 'type', 'allowscriptaccess', 'allowfullscreen', 'width' => '#text', 'height', 'wmode')); $jevix->cfgAllowTagParams('iframe', array('src', 'type', 'allowscriptaccess', 'allowfullscreen', 'width' => '#text', 'height', 'wmode', 'frameborder')); // 6. Устанавливаем параметры тегов являющиеся обязательными. Без них вырезает тег оставляя содержимое. $jevix->cfgSetTagParamsRequired('img', 'src'); // 9. Устанавливаем автозамену $jevix->cfgSetAutoReplace(array('+/-', '(c)', '(r)'), array('±', '©', '®')); // 10. Включаем или выключаем режим XHTML. (по умолчанию включен) $jevix->cfgSetXHTMLMode(true); // 11. Включаем или выключаем режим замены переноса строк на тег $jevix->cfgSetAutoBrMode(false); // 12. Включаем или выключаем режим автоматического определения ссылок. (по умолчанию включен) $jevix->cfgSetAutoLinkMode($autolink); // 13. Отключаем типографирование в определенном теге $jevix->cfgSetTagNoTypography('code', 'video', 'iframe'); // 14. Устанавливаем пустые теги $jevix->cfgSetTagIsEmpty('iframe'); } else { // 1. Устанавливаем разрешённые теги. (Все не разрешенные теги считаются запрещенными.) $jevix->cfgAllowTags(array('table', 'tr', 'td', 'th', 'p', 'a', 'img', 'i', 'b', 'u', 'em', 'strong', 'nobr', 'li', 'ol', 'ul', 'sup', 'abbr', 'pre', 'acronym', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'adabracut', 'br', 'code', 'div', 'span')); // 2. Устанавливаем коротие теги. (не имеющие закрывающего тега) $jevix->cfgSetTagShort(array('br', 'img')); // 3. Устанавливаем преформатированные теги. (в них все будет заменятся на HTML сущности) $jevix->cfgSetTagPreformatted(array('pre')); // 4. Устанавливаем теги, которые необходимо вырезать из текста вместе с контентом. $jevix->cfgSetTagCutWithContent(array('script', 'javascript', 'object', 'iframe', 'style', 'embed', 'applet')); // 5. Устанавливаем разрешённые параметры тегов. Также можно устанавливать допустимые значения этих параметров. $jevix->cfgAllowTagParams('div', array('class', 'id')); $jevix->cfgAllowTagParams('span', array('class', 'id')); $jevix->cfgAllowTagParams('a', array('title', 'href', 'target', 'class', 'id')); $jevix->cfgAllowTagParams('img', array('src', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int')); $jevix->cfgAllowTagParams('table', array('border', 'class', 'width', 'align', 'valign')); $jevix->cfgAllowTagParams('tr', array('height', 'class')); $jevix->cfgAllowTagParams('td', array('colspan', 'rowspan', 'class', 'width', 'height', 'align', 'valign')); $jevix->cfgAllowTagParams('th', array('colspan', 'rowspan', 'class', 'width', 'height', 'align', 'valign')); // 6. Устанавливаем параметры тегов являющиеся обязательными. Без них вырезает тег оставляя содержимое. $jevix->cfgSetTagParamsRequired('img', 'src'); //$jevix->cfgSetTagParamsRequired('a', 'href'); // 7. Устанавливаем теги которые может содержать тег контейнер // cfgSetTagChilds($tag, $childs, $isContainerOnly, $isChildOnly) // $isContainerOnly : тег является только контейнером для других тегов и не может содержать текст (по умолчанию false) // $isChildOnly : вложенные теги не могут присутствовать нигде кроме указанного тега (по умолчанию false) //$jevix->cfgSetTagChilds('ul', 'li', true, false); // 8. Устанавливаем атрибуты тегов, которые будут добавлятся автоматически //$jevix->cfgSetTagParamDefault('a', 'rel', null, true); //$jevix->cfgSetTagParamsAutoAdd('a', array('rel' => 'nofollow')); //$jevix->cfgSetTagParamsAutoAdd('a', array('name'=>'rel', 'value' => 'nofollow', 'rewrite' => true)); //$jevix->cfgSetTagParamDefault('img', 'width', '300px'); //$jevix->cfgSetTagParamDefault('img', 'height', '300px'); //$jevix->cfgSetTagParamsAutoAdd('img', array('width' => '300', 'height' => '300')); //$jevix->cfgSetTagParamsAutoAdd('img', array(array('name'=>'width', 'value' => '300'), array('name'=>'height', 'value' => '300') )); // 9. Устанавливаем автозамену $jevix->cfgSetAutoReplace(array('+/-', '(c)', '(r)'), array('±', '©', '®')); // 10. Включаем или выключаем режим XHTML. (по умолчанию включен) $jevix->cfgSetXHTMLMode(true); // 11. Включаем или выключаем режим замены переноса строк на тег <br/>. (по умолчанию включен) $jevix->cfgSetAutoBrMode(false); // 12. Включаем или выключаем режим автоматического определения ссылок. (по умолчанию включен) $jevix->cfgSetAutoLinkMode($autolink); // 13. Отключаем типографирование в определенном теге $jevix->cfgSetTagNoTypography('code'); } // Переменная, в которую будут записыватся ошибки $errors = null; return $jevix->parse($text, $errors); }
function cleanup() { //include_once 'class.jevix.php'; $jevix = new Jevix(); $jevix->cfgAllowTags(array('a', 'img', 'i', 'b', 'u', 'em', 'strong', 'sup', 'br')); $jevix->cfgSetTagShort(array('br', 'img')); $jevix->cfgSetTagCutWithContent(array('script', 'object', 'iframe', 'style')); $jevix->cfgAllowTagParams('a', array('title', 'href')); $jevix->cfgAllowTagParams('img', array('src', 'alt' => '#text')); $jevix->cfgSetTagParamsRequired('img', 'src'); $jevix->cfgSetTagParamsRequired('a', 'href'); $jevix->cfgSetTagParamsAutoAdd('a', array('target' => '_blank')); $jevix->cfgSetAutoReplace(array('+/-', '(c)', '(r)', '&'), array('±', '©', '®', '&')); $jevix->cfgSetXHTMLMode(true); $jevix->cfgSetAutoBrMode(true); $jevix->cfgSetAutoLinkMode(false); $errors = null; if (isset($_POST)) { foreach ($_POST as $key => $value) { if (!is_array($value)) { $_POST[$key] = $jevix->parse($value, $errors); } } } if (isset($_GET)) { foreach ($_GET as $key => $value) { $_GET[$key] = $jevix->parse($value, $errors); } } if (isset($_COOKIE)) { foreach ($_COOKIE as $key => $value) { $_COOKIE[$key] = $jevix->parse($value, $errors); } } unset($jevix); }
public static function getInstance(){ if (!isset(self::$instance)){ self::$instance = new self(); } return self::$instance; }
/** * Парсинг текста с помощью Jevix * * @param string $sText * @param array $aError * @return string */ public function JevixParser($sText, &$aError = null) { $sResult = $this->oJevix->parse($sText, $aError); return $sResult; }