html in php abschalten...

alexorg

Mitglied
hoi,

also, ich hab folgendes problem nämlich das man in meinem gästebuch
html code ausführen kann... hat jemand ne ahnung wie man das unterbinden kann.... hier mal der code:

PHP:
<?
include ("inc/conf_gb.inc");
?>

<body bgcolor="#FFFFFF" text="#000000" link="#FF0000" vlink="#FF0000" alink="#FF0000">
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="left">
  <tr> 
				
    <td bgcolor="a0c1d5" width="100%"> 
      <table width="100%">
        <tr>
				  
          <td bgcolor="#FFFFFF"><font color="#FF0000" size="1"> 
            <?
				    if ($action=="neu" or $error=="error") {
				    echo "<a href='index.php?style=book'>back to guestbook</a>";
				    }else{
				    echo "<a href='index.php?style=book&action=neu'>sign in my guestbook</a>";
				    }	
				    ?>
            </font><b> </b> </td>
				   
          <td align="right" bgcolor="a0c1d5"><font size="1"> <b><a href="admin" target="blank"><font color="#FF0000" face="Verdana, Arial, Helvetica, sans-serif" size="1">admin</font></a></b> 
          </td>
				 </tr>
				</table>
				</font>
    </td>
			  </tr>
			  <tr>
				
    <td width="100%" bgcolor="eef6fb"> 
      <?php		
				
function url_check($text)
{
	$ret = " " . $text;
	$ret =preg_replace("#([\n ])([a-z]+?)://([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]+)#i","\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>", $ret);
	$ret = preg_replace("#([\n ])www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)?)#i", "\\1<a href=\"http://www.\\2.\\3\\4\"target=\"_blank\">www.\\2.\\3\\4</a>", $ret);
	$ret =preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)?[\w]+)#i","\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
	$ret = substr($ret, 1);

	return($ret);
}

			
				

$conn_id = mysql_connect($host,$id,$pw); 
mysql_select_db($database,$conn_id);




  if ($action=="save") { 
  
  	if ($name==""){
  		$errorname="1";
		$error="error";
		$falsch="error";
		}
		
	if ($email != ""){
        if (eregi("^[0-9A-Za-z]([-_.+]?[0-9A-Za-z])*@[0-9A-Za-z]([-.]?[0-9A-Za-z])*\\.[a-zA-Z]{2,7}$", $email)) {
	    //alles richtig
	     }else{
        $errormail="1";
	    $error="error";
	  }
    }
		
	if ($inhalt==""){
  		$errorinhalt="1";
		$error="error";
		$falsch="error";
		}
	if ($error=="error"){	
		$action="neu";
		}
		
 		 if ($action=="save"&&$error=="") { 
    		$datum = time(); 
    		$inhalt = $inhalt; 
    		$name = ($name) ? $name : "unknown"; 
    		mysql_query("insert into $table (name,email,open,hp,inhalt,datum) VALUES ('$name','$email','$open','$hp','$inhalt','$datum')"); 
  			} 
		}
	  

echo "<font size='1' face='Verdana, Arial, Helvetica, sans-serif'><br>"; 
//Fehler Auagabe
if($action=="neu") {

if($errormail=="1"){
    echo $emailfrong."<br>";
	}
if($falsch!=""){
	echo $not_filled."<br>";
	}
if($errorname=="1"){
	echo "<b>name, </b>";
	}
if($errorinhalt=="1"){
	echo "<b>message</b>";
	}
if($error!=""){
echo "<br><br>";
}
// Hier beginnt die HTML Ausgabe 
?>
      <table cellpadding="0" border="0" cellspacing="0" width="100%" bgcolor="eef6fb" align="left">
        <form action="<?php echo 'index.php?style=book' ?>" method=post>
          <tr> 
            <td valign="top" width="75"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">name:*</font></td>
            <td> <font size="1"> 
              <input type=text name=name  <? if(isset($name)) echo "value='$name'";?> size="30">
              </font></td>
          </tr>
          <tr> 
            <td valign="top"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">mail:</font></td>
            <td> <font size="1"> 
              <input type=TEXT name=email  <? if(isset($email)) echo "value='$email'";?> size="30">
              </font></td>
          </tr>
          <tr> 
            <td valign="top"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Site:</font> 
            </td>
            <td> <font size="1"> 
              <input type=text name=hp  <? if(isset($hp)) echo "value='$hp'";?> value="http://" size="30">
              </font></td>
          </tr>
          <tr> 
            <td valign="top"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">message:*</font></td>
            <td> <font size="1"> 
              <textarea name="inhalt" rows="6" cols="35" ><? if(isset($inhalt)) echo "$inhalt";?></textarea>
              </font></td>
          </tr>
          <tr> 
            <td valign="top" colspan="2"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
              <input type=checkbox name=open checked value=1>
              show email in the guestbook<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
              * m&uuml;ssen ausgef&uuml;llt werden </font> </td>
          </tr>
          <tr> 
            <td valign="top"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              <input type=submit value="sign in" >
              </font></td>
            <td> <font size="<? echo $font_size; ?>"><br>
              <br>
              <br>
              </font></td>
            <input type="hidden" name="action" value="save">
        </form>
      </table> 


      <?php 
}else{

// Guckt ob es Mehrere Seiten sind  

	if (!isset($Anfangsposition)) {
  	  $Anfangsposition = 0;
	}

	$sql="select * from $table "." limit $Anfangsposition,$Zeilen_pro_Seite";
	$result=mysql_query($sql);
	$result1=mysql_query("select Count(nr) AS nr from $table");

//	$Anzahl=mysql_num_rows($result1);
	$Anzahl=mysql_fetch_array($result1);
	$Anzahl = $Anzahl["nr"];
	while ($row=mysql_fetch_array($result)) {
	
	
	if($Anzahl>$Zeilen_pro_Seite) {
  $Seiten=intval($Anzahl/$Zeilen_pro_Seite);
  if($Anzahl%$Zeilen_pro_Seite) {
    $Seiten++;
  }
}

for ($i=1;$i<=$Seiten;$i++) {
  $fwd=($i-1)*$Zeilen_pro_Seite;
  $fwdanzeige=($fwd/10+1);
  if($fwd == $Anfangsposition){
  echo "<a href=\"book.php?Anfangsposition=$fwd\"><img src='./img/seite2.gif' border='0' alt='page $fwdanzeige';></a>";
  }else{
   echo "<a href=\"book.php?Anfangsposition=$fwd\"><img src='./img/seite.gif' border='0' alt='page $fwdanzeige';></a>";
}
}
echo "<br><br>";
	
	
// Ausgabe aller Einträge aus dem Gästebuch 

  $query = "select * from $table order by datum desc limit $Anfangsposition,$Zeilen_pro_Seite"; 
  $result = mysql_query($query);
   
  
  if (mysql_num_rows($result)) { 
    while($row=mysql_fetch_array($result)) {  
	  $name = $row['name']; 
      $open = $row['open']; 
      $email = $row['email']; 
      $hp = $row['hp']; 
      $inhalt = $row['inhalt']; 
      $kommentar = $row['kommentar']; 
      $datum = date("d.m.y",$row['datum']); 
	  
	    //Formatieren das Textes
  
  		$inhalt_fastfertig = nl2br($inhalt);
		
		$name = "$name ";
		$name_lange = strpos($name," ");
		if ($name_lange > "10"){
			$name_fertig = chunk_split("$name",10,"-<BR>");
			}else{
			$name_fertig = $name;
			}
			
  		$inhalt_fertig = wordwrap( $inhalt_fastfertig,40," ",1);
		$inhalt_komplett = url_check($inhalt_fertig);
  		//Ende Formatieren
      
     echo "<table bgcolor='a0c1d5' width='100%' border='0' cellspacing='0' cellpadding='0'>\n<td class='' width='100' valign='top'>\n<font size='1'>\n";
	  echo "<b>$name_fertig</b><br>\n"; 
      if($open && $email) {
	  	echo "<a href='mailto:$email'><img src='./img/mail.gif' width='16' height='16' border='0' alt='$email'></a>&nbsp;&nbsp;\n";
		}else{ echo "\n";
		}
      if($hp==""){
	  	echo "<br>\n";
		}elseif($hp=="http://"){
		echo "<br>\n";
		}else{
		echo "<a href='$hp' target='_blank'><img src='./img/www.gif' width='16' height='16' border='0' alt='$hp'></a><br>\n";
		}
		
		echo "<td class='' width='350' valign='top'>\n<font size='1'>\n";
      echo " ".$inhalt_komplett; 
      if($kommentar) echo "<i><br><br><b>Webmaster comment:</b><br>\n ".$kommentar."<br></i>\n"; 
	  flush(); 
    echo "</font>\n</font>\n</td></td>\n</table><br>";
    } 
  } else { 
    echo "Bis jetzt gab es keine Einträge"; 
  }
}
}
// Ende
?>
    </td>
				</tr>
			</table>
 
also ich zieh mir jetzt bestimmt nicht deine 3 millionen seiten code rein, aber mit

$text = htmlspecialchars($text);

kannst du den html code "abschalten".
 
strip_tags schmeißt alle HTML-Tags aus dem String...aber vielleicht will ja mal einer ein HTML-Beispiel posten...dann kann er das nicht, weil´s rausgeschmissen wird (ist natürlich unrealistisch, weil wer postet in einem GB HTML-Beispiele?)

htmlspecialchars wandelt nur einen Teil des Strings (<,>,& und ein paar andere) in HTML-Zeichen um....

wenn man alles richtig umwandeln will in HTML, dann sollte man htmlentities nehmen...
 
Zurück