PHP Textausgabe optimieren

raven16

Lieutenant
Registriert
Nov. 2008
Beiträge
580
Hi ich bins schon wieder, ich kann eben nix alleine :D

ich komm grad nicht bei meiner Textausgabe zurecht,

PHP:
if(isset($_POST['search']))
{
	connect();
	$sql_quicksearch = mysql_query("SELECT probtitel,probtext,probtype,probanswer,probuser,probdate,probname,probmail,probage,probgender FROM probleme WHERE probid='".$_POST['search-id']."' LIMIT 1") or die(mysql_error()." ->Abfrage <b>sql_quicksearch_text</b> klappt nicht.");
	if(mysql_num_rows($sql_quicksearch) != 0)
	{
		$obj_quicksearch = mysql_fetch_object($sql_quicksearch);
		$year = date("d.m.Y", $obj_quicksearch->probdate);
		$time = date("H:i", $obj_quicksearch->probdate);
		$text = $obj_quicksearch->probtext;
		$text_nohtml = htmlentities($text);
		$text_filtered = nl2br($text_nohtml);
		echo'
		<div class="inhalt-middle">
			<div class="textbox">
				<div class="textbox-title">
					<label>Problem von '.$obj_quicksearch->probname.'('.$obj_quicksearch->probage.$obj_quicksearch->probgender.') am '.$year.' um '.$time.' Uhr</label>
				</div>
				<div class="textbox-inhalt">
					<br><label><b>'.$obj_quicksearch->probtitel.'</b></label><br><br><hr><br>
												<label>'.$text_filtered.'</label><br><br>
				</div>
			</div>
		</div>';
}

Meine Ausgabe macht nun vor jeden Sonderzeichen ein \
Beispiel aus "test" wird \"test\" gemacht und ausgegeben... genau das möchte ich vermeiden... andererseits möchte ich aber auch nicht, dass html,php oder javascript funktioniert in der textausgabe...

wie kann ich am besten meine Ausgabe gestalten, das der text so ausgegeben wird, wie er eingegeben wurde und keine programmier-/scriptsprache erkannt wird?
 
Mit der Funktion sollte es klappen:

PHP:
 function encode($s, $linebreaks = true)
{
  $s = str_replace("/", "", $s);
  if ($linebreaks)
    $s = nl2br($s);
  return $s;
}


Und wenn du noch html und Javascript verbieten willst kannste das auch erweitern:

PHP:
  function encode($s, $linebreaks = true)
{
  $s = str_replace("<", "", str_replace("&", "", $s));
//falls "" nicht geht, wieso auch immer kannst das hier rein mit dem tauschen "<", "&lt;", str_replace("&", "&amp;", $s
// dann halt per preg_replace die zeichen &lt; und &amp; rausfiltern/ersetzen
  if ($linebreaks)
    $s = nl2br($s);
  return $s;
}


Ungetestet aber sollte so gehen.
Lg
 
Zuletzt bearbeitet:
danke für den vorschlag str_replace

hab jetzt das gemacht:
PHP:
$text = htmlentities($text);
$text = stripslashes($text);
$text = str_replace('{',' ',$text);
$text = str_replace('}',' ',$text);
$text_filtered = nl2br($text);

das problem mit den "Anführungszeichen" konnte ich mit stripsplashes() lösen, weil dann einfach alle \backsplashes\ nicht mehr angezeigt werden

aber hab das str_replace noch nicht 100%ig verstanden... wie schaut das aus, wenn ich beide replace befehle in einem schreibe?

und hab ich mit meinem quelltext nun alle möglichkeiten irgendwelche scripts oder programmsprachen verhindert?
 
Du kannst natürlich beide befehle in einem schreiben:

PHP:
$text = str_replace('{',' ', str_replace('}',' ',$text));

Wichtig ist halt nur das du alle ausführbaren Zeichen rausfilterst {} < <% etc
Und die sollten durch die eingesetzten Funktion deiner seits nun nicht mehr vorkommen.
 
raven16 schrieb:
$sql_quicksearch = mysql_query("SELECT probtitel,probtext,probtype,probanswer,probuser,probdate,probname,probmail,probage,probgender FROM probleme WHERE probid='".$_POST['search-id']."' LIMIT 1") ....

Das is nicht dein ernst oder? mach wenigstens n mysql_real_escape_string rum.
 
nesQuick schrieb:
Das is nicht dein ernst oder? mach wenigstens n mysql_real_escape_string rum.

Normal benutz ich auch immer intval() oder mysql_real_escape_string()

Aber ich dachte man braucht das nicht bei SELECT-Abfragen?
 
Wie kommst du denn darauf?

Das brauchst du bei allen Datenbankabfragen!


Lies dir den Artikel auf Wikipedia durch.
 
raven16 schrieb:
Normal benutz ich auch immer intval() oder mysql_real_escape_string()

Aber ich dachte man braucht das nicht bei SELECT-Abfragen?

Wieso sollten SELECT Abfragen für SQL-Injection weniger anfällig sein?
 
Zurück
Oben