Ескейпване на апостоф с htmlentities

Pro_Lamer4e

Registered
здравейте, имам проблем с BBcode едитор, когато в текста присъства ( ' ) изобщо не запазва в базата никакъв текст ,има ли начин да се оправи това и как.

Код:
function encode_code($text) {
	$start_html = "<div align=\"center\"><div style=\"width: 85%; overflow: auto\">"
		. "<table width=\"100%\" cellspacing=\"1\" cellpadding=\"3\" border=\"0\" align=\"center\" class=\"bgcolor4\">"
		. "<tr bgcolor=\"E5EFFF\"><td colspan=\"2\"><font class=\"block-title\">Code</font></td></tr>"
		. "<tr class=\"bgcolor1\"><td align=\"right\" class=\"code\" style=\"width: 5px; border-right: none\">{ZEILEN}</td><td class=\"code\">";
	$end_html = "</td></tr></table></div></div>";
	$match_count = preg_match_all("#\[code\](.*?)\[/code\]#si", $text, $matches);
	for ($mout = 0; $mout < $match_count; ++$mout) {
		$before_replace = $matches[1][$mout];
		$after_replace = $matches[1][$mout];
		$after_replace = trim($after_replace);
		$zeilen_array = explode("<br />", $after_replace);
		$j = 1;
		$zeilen = "";
		foreach ($zeilen_array as $str) {
			$zeilen .= "" . $j . "<br />";
			++$j;
		}
		$after_replace = str_replace("", "", $after_replace);
		$after_replace = str_replace("&", "&", $after_replace);
		$after_replace = str_replace("", "  ", $after_replace);
		$after_replace = str_replace("", "  ", $after_replace);
		$after_replace = str_replace("", "   ", $after_replace);
		$after_replace = preg_replace("/^ {1}/m", " ", $after_replace);
		$str_to_match = "[code]" . $before_replace . "
";
$replace = str_replace("{ZEILEN}", $zeilen, $start_html);
$replace .= $after_replace;
$replace .= $end_html;
$text = str_replace($str_to_match, $replace, $text);
}

$text = str_replace("
Код:
", $start_html, $text);
	$text = str_replace("
", $end_html, $text);
return $text;
}[/code]
 
Msecurity каза:
addslashes....
По-добре prepared statements. Иначе трябва да внимава за абсолютно вски параметър да мине през addslashes. По-добре да се остави тази работа на db engine-а.
 
А ако направи така htmlentities(mysql_real_escape_string(addslashes($_POST["name"]))); няма ли да е по добре? За процедурен код..
 
Така дали ще свърши работа
Код:
if (!function_exists("htmlspecialchars")) {
	function htmlspecialchars($message) {
		$message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // Fix & but allow unicode
		$message = str_replace("<","<",$message);
		$message = str_replace(">",">",$message);
		$message = str_replace("\"",""",$message);
		$message = str_replace("  ", "  ", $message);
                $message = str_replace("", "<", $message);
		return $message;
	}

    function html($str) {
        return htmlspecialchars($str);
    }
}
 
georgi27 каза:
А ако направи така htmlentities(mysql_real_escape_string(addslashes($_POST["name"]))); няма ли да е по добре? За процедурен код..

Няма смисъл от трите едновременно. Първото е за дисплейване на потребителски инпут в html, второто е за вкарване на стойности в заявка, а последното слага \ пред кавичките.
 
Pro_Lamer4e каза:
Така дали ще свърши работа
Код:
if (!function_exists("htmlspecialchars")) {
	function htmlspecialchars($message) {
		$message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // Fix & but allow unicode
		$message = str_replace("<","<",$message);
		$message = str_replace(">",">",$message);
		$message = str_replace(""",""",$message);
		$message = str_replace("  ", "  ", $message);
                $message = str_replace("", "<", $message);
		return $message;
	}

    function html($str) {
        return htmlspecialchars($str);
    }
}

Тук дефинираш built-in функция - защо?
 
anonimen каза:
Pro_Lamer4e каза:
Така дали ще свърши работа
Код:
if (!function_exists("htmlspecialchars")) {
	function htmlspecialchars($message) {
		$message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // Fix & but allow unicode
		$message = str_replace("<","<",$message);
		$message = str_replace(">",">",$message);
		$message = str_replace(""",""",$message);
		$message = str_replace("  ", "  ", $message);
                $message = str_replace("", "<", $message);
		return $message;
	}

    function html($str) {
        return htmlspecialchars($str);
    }
}

Тук дефинираш built-in функция - защо?

ами и аз това се чудеш, взех скрипта за bbcode от един руски тракер, защото ми се видя най удачен и лесен... , но днес видях и тази функция . и реших все пак да я споделя, за да решим проблема ми с ' , започвам да се замислям дали да не ползвам ckeditor. ако искаш ще сподела целия bbcode да го разгледаш
 

Горе