Показать сообщение отдельно

  #39  
Старый 06.05.2009, 18:24
Аватар для Grey
Grey
AMA - Level 2
Регистрация: 10.06.2006
Сообщений: 1,113
Провел на форуме:
17668503

Репутация: 5826


По умолчанию

Цитата:
Сообщение от Psi.X  
Логин приходит в базу через $tp -> toDB() но НЕ ФИЛЬТРУЕТСЯ !
Можно дописать после нее echo $authname, и мы увидим резалт.
Ну как же не фильтруется, когда напротив очень даже фильтруется.
Смотрим e107_handlers/e_parse_class.php

Дабы избежать того, на что наткнулся ты, я поставлю /*1*/ в те участки кода, которые браузер воспринимает не так как они есть на самом деле:

Код:
	function toDB($data, $nostrip = false, $no_encode = false, $mod = false)
	{
		global $pref;
		if (is_array($data)) {
			// recursively run toDB (for arrays)
			foreach ($data as $key => $var) {
				$ret[$key] = $this -> toDB($var, $nostrip, $no_encode, $mod);
			}
		} else {
			if (MAGIC_QUOTES_GPC == TRUE && $nostrip == false) {
				$data = stripslashes($data);
			}
			if(isset($pref['post_html']) && check_class($pref['post_html']))
			{
				$no_encode = TRUE;
			}
			if ($no_encode === TRUE && $mod != 'no_html')
			{
				$search = array('$', '"', "'", '\\', '<?');
				$replace = array('&#/*1*/036;','&q/*1*/uot;','&#/*1*/039;', '&#0/*1*/92;', '&/*1*/lt;?');
				$ret = str_replace($search, $replace, $data);
			} else {
				$data = htmlspecialchars($data, ENT_QUOTES, CHARSET);
				$data = str_replace('\\', '\', $data);
				$ret = preg_replace("/&amp;#(\d*?);/", "&#\\1;", $data);
			}
			//If user is not allowed to use [php] change to entities
			if(!check_class($pref['php_bbcode']))
			{
				$ret = preg_replace("#\[(php)#i", "[\\1", $ret);
			}

		}

		return $ret;
	}
Если чуть короче, то вот замена, которая нам нужна:

' -> &#/*1*/039;

Что делает браузер? отображает &#/*1*/039; как привычную кавычку.
Что делаешь ты? дописываешь в код echo($authname);
И видишь, то, что хочешь увидеть - кавычку, а вот если заглянуть в сорец странички (html (Вид - Исходный код страницы)), то можно увидеть что кавычки там нету, а есть &#/*1*/039;
 
Ответить с цитированием