Здравствуйте.
Использую CodeIgniter 2
Пытаюсь сохранить в бд url страницы. Но не совсеми прокатывает. Например длинные ссылки googla сохраняет на ура, а ссылки на сайты joomla обрезает.
Вот пример:
Сохраняю параметры с формы
<form id="main_form" accept-charset="utf-8" method="post" action="http://my_site/index.php/pages/row_edit/tbl_contacts/70/218">
Один из параметров url.
http://www.site.ru/index.php?option=com_content&view=article&id=456%3A2013-09-10-13-37-27&catid=31%3A2013-09-10-13-31-23&Itemid=33
Записываю его в контрол и отправляю на сервер при помощи метода $.post jQuery
В инспекторе параметр отображается нормально. Строка которая отправляется на сервер выглядит так:
id=70&page_id=218&url=http%3A%2F%2Fwww.site.ru%2Findex.php%3Foption%3Dcom_content%26view%3Darticle%26id%3D456%253A2013-09-10-13-37-27%26catid%3D31%253A2013-09-10-13-31-23%26Itemid%3D33
но при выводе print_f($_POST) параметр url обрезается на
Array
(
[id] => 70
[page_id] => 218
[url] => http //www.site.ru/index.php?opti
)
Прошу помощи у сообщества.
В конечном итоге разобрался.
Оказывается у CI 2 есть такой метод xss_clean, который участвует в валидации, так вот там проверяется следующее
protected function _remove_evil_attributes($str, $is_image)
{
// All javascript event handlers (e.g. onload, onclick, onmouseover), style, and xmlns
$evil_attributes = array('on\w*', 'style', 'xmlns', 'formaction');
if ($is_image === TRUE)
{
/*
* Adobe Photoshop puts XML metadata into JFIF images,
* including namespacing, so we have to allow this for images.
*/
unset($evil_attributes[array_search('xmlns', $evil_attributes)]);
}
do {
$count = 0;
$attribs = array();
// find occurrences of illegal attribute strings with quotes (042 and 047 are octal quotes)
preg_match_all('/('.implode('|', $evil_attributes).')\s*=\s*(\042|\047)([^\\2]*?)(\\2)/is', $str, $matches, PREG_SET_ORDER);
foreach ($matches as $attr)
{
$attribs[] = preg_quote($attr[0], '/');
}
// find occurrences of illegal attribute strings without quotes
preg_match_all('/('.implode('|', $evil_attributes).')\s*=\s*([^\s>]*)/is', $str, $matches, PREG_SET_ORDER);
foreach ($matches as $attr)
{
$attribs[] = preg_quote($attr[0], '/');
}
// replace illegal attribute strings that are inside an html tag
if (count($attribs) > 0)
{
$str = preg_replace('/(<?)(\/?[^><]+?)([^A-Za-z<>\-])(.*?)('.implode('|', $attribs).')(.*?)([\s><]?)([><]*)/i', '$1$2 $4$6$7$8', $str, -1, $count);
}
} while ($count);
return $str;
}
т.е. вырезаются все Javascript, css и xmlns
вот тут то и проверяется наличие этого "on"
Всем спасибо