как бы мне узнать, был ли включен яваскрипт у клиента во время выполнения скрипта? на ум приходит боди онлоад и записывать в какой-нить хидден значение. Но, это уже возможная дырка. В чем проблема. Если у клиента включен ЯС, подсовываю ему визуальный редактор. Если нет - получается обыкновенная текстэрия. Так, вот, если ЯС включен, знчение текстэрии вставляется в бд без хтмлспешиалчарс, а если включен - хтмлспесиалчарс, обработка бб кодов и в базу. Блин... Можно подпихнуть данные якобы при включеном ЯС... вот и наткнулись на второй вопрос. Как вы вставляете данные из визинг редакторов? хтмлспешиалчар превратит все в простой текст.. вот, незадача
Выключают javascript единицы людей (а большинство и не знает, что это такое). Некоторые утверждают, что выключают JS, когда заходят на порносайты. Вот тут тов. Штаны предлагал варианты http://php.ru/forum/viewtopic.php?p=74664#74664
Ну, это геморр какой-то обрабатывать js пыхом... хз... а на счет второго вопроса, что скажешь? как валидишь данные пришедшие из визинг формы?
Kreker да лан.. там простая. <p>,<br />, <strong>, <em>, <blockquote>!! О!!! А может поможешь регулярку написать? скажу спасибо
юзаю strip_tags. Все еще жду комментариев по-поводу описанного выше способа определения включенности JS
ShamahN Вот текущая. Раньше было более работоспособно, теперь я на скорую руку переделал (намудрил что-то с сущностями ) Но, к сожалению, времени сделать нормальную пока нет. Поэтому текущая работает, но насчет стабильности не утверждаю. PHP: <?php //Теги со свойствами $result = preg_replace('~<(tr|td|table|tbody|span|div|a|img|ul|li|ol|font|sup|sub|b|br|p)(.*?)>~is', '<$1$2>', $text); //Закрывающие теги $result = preg_replace('~<\/(tr|td|table|tbody|span|div|a|img|ul|li|ol|font|sup|sub|b|br|p)>~is', '</$1>', $result); //Расставляем кавычки у атрибута align & class (for IE) $result = preg_replace('~(align|class)=([a-z]+?)(>|\s)~is', '$1="$2"$3', $result); //Javascript options & classes $result = preg_replace('~\s(onMouseOver|OnMouseout|onClick|onAbort|onBlur|onChange|onClick|onDblClick|onDragdrop|onError|onFocus|onKeyDown|onKeyPress|onLoad|onUnload|onKeyUp|class|lang)\=("|\'|"){1}(.*?)("|\'|"){1}~is', '', $result); //youtube preg_match_all('~\[youtube\](.*?)\[/youtube\]~is', $result, $tubes); if (!empty($tubes[0][0])) { //Заменяем в найденых редисках specialchars $valtubes = sizeof($tubes[0]); for ($i = 0; $i < $valtubes; $i++) { $newstring = strtr($tubes[1][$i], Array("&" => "&", """ => "\"", "<" => "<", ">" => ">")); $result = str_replace($tubes[0][$i], $newstring, $result); } } //Чистка от Ms Word $result = preg_replace(Array( '~<\?xml:namespace prefix =(?:.*?)">~is', '~<v:shapetype(?:.*?)<\/v:shape>~is', '~<w:(?:.*?)>(?:.*?)<\/w:(?:.*?)>~is', "~<meta(?:.*?)>~is", '~<!\[(?:.*?)\]-->~is', '~<!--\[(?:.*?)\]>~is', '~<xml>(?:.*?)<\/xml>~is', '~<style>(?:.*?)<\/style>~is', '~<o:(?:.*?)></o:(?:.*?)>~is', '~<link(?:.*?)>~is'), '', $result); //Соединяем теги function optimize_span($result) { $result = preg_replace('~<span\sstyle="(?:[\#a-zA-Z\:\;\s\-]+)">(\\s| )*?</span>~is', '', $result); preg_match_all('~<span\sstyle="(?:[\#a-zA-Z\:\;\s\-]+)"><span\sstyle="(?:[\#a-zA-Z\:\;\s\-]+)">(?:.*?)</span></span>~is', $result, $matches); $smatches = sizeof($matches[0]); for ($i = 0; $i < $smatches; $i++) { preg_match_all('~<span\sstyle="(.+?)">~is', $matches[0][$i], $match2); $size = sizeof($match2[0]) -1; $patt = $match2[0][($size-1)].$match2[0][($size)]; $string = strtr($matches[0][$i], Array($patt => '<span style="'.$match2[1][($size-1)].' '.$match2[1][($size)].'">', "</span></span>" => "</span>")) ; $result = strtr($result, Array($matches[0][$i] => $string)) ; } return $result; } $result = optimize_span($result); $result = optimize_span($result); $result = optimize_span($result); $result = optimize_span($result); $res = strtr($result, Array( "<br>" => "<br /> ", "&nbsp;" => " ", "&mdash;" => "—", "style=\"\"" => "", "<o:p>" => "", "</o:p>" => "", "<!--[endif]-->" => "", "<!--[if !supportLists]-->" => "", """ => "'", "<!--[if gte vml 1]>" => "", "\r\n" => "<br /> ", "style=""" => "", '<img src="http://'.$_SERVER['HTTP_HOST'] => '<img src="', )); Блин... гляну на эту фигню и возникает мысль "какого хрена?"
Kreker ОМГ.. это невиданный зверь не надо мне столько у меня все просто - пришел нагадить, - обрезаем все нах Все лишние тэги вместе с содержимым можно вообще делать PHP: <?php if(strip_tags($message, "<p><br><strong><em><blockquote>")!=$message) trigger_error("Иди в жо.у", E_USER_ERROR); Для него были созданы все условия нех гадить где попало.. А ты еще подчищать пытаешься
млин.. Не хочу реанимировать топик http://php.ru/forum/viewtopic.php?p=74664#74664 Но меня мучает вопрос. Если прибегнуть к ментоду описанному там, какие подводные камни могут выплыть? Естественно я не собираюсь Код (Text): RemoveHandler .js AddType application/x-httpd-php .js придумаю какое-нить свое расширение. Допустим .ext И если HTML: <script type="text/javascript" src="файл.ext"></script> в файл.ext зарядить PHP: <?php session_start(); $_SESSION['js_flag'] = true; как это может ухудшить работу скрипта?