PHP HTML Code aus String Variable löschen

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hallo Leute

Folgende Frage...


HTML:
<span id="count" class="countnumeric">659 </span>

Wie bekommt man mit PHP aus einer Stringvariable alles ausser der Zahl sauber gelöscht bzw. raus gefiltert?
Habe es mit preg_replace versucht was aber irgendwie nicht richtig geklappt hat, eventuell gibt es ja eine ganz einfache Methode?

Danke!

EDIT: Hat sich erledigt, habs gefunden "strip_tags".
 
Zuletzt bearbeitet:
Habe es mit preg_replace versucht
Sprich mir nach: HTML ist keine reguläre Sprache. HTML ist keine reguläre Sprache. ;) HTML mit regulären Ausdrücken filtern zu wollen ist entsprechend das Dämlichste was du machen kannst. Nur so als Tipp für die Zukunft, falls du nochmal irgendwas mit HTML-Verarbeitung machen willst. ;)
 
Er schrieb doch mit PHP?
Sprich mir nach. Erst lesen dann schreiben. Erst lesen dann schreiben.
 
Zusätzlich zu strip_tags() würde ich noch einen Typecast auf Ganzzahl durchführen, also:

PHP:
$var = (int)strip_tags($input_value);

Dadurch ist sichergestellt, dass es sich um eine Ganzzahl handelt und keinesfalls um irgendwas anderes.
 
Nicht zwingend, da es bei einem Typecast durchaus vorkommen kann, dass bestimmte Zeichen in Zahlen umgewandelt werden, obwohl es keine sind. Dies kann besonders im Zusammenhang mit UTF-8 Zeichen (oder anderen Kodierungen von Eingaben) zu Problemen führen. Die Funktion strip_tags() bietet hier eigentlich nicht einmal irgendeinen Schutz.

Eine andere, schnellere Variante:

PHP:
$var = (is_numeric($input_value)) ? (int)$input_value : 0;

// Oder um es etwas deutlicher klar zu machen für alle die
// sich nicht so gut mit PHP auskennen.

$var = 0;

if (is_numeric($input_value) === TRUE) {
  $var = (int)$input_value;
}

is_numeric() überprüft ob die gegebene Variable (unabhängig vom Typ) als Ganzzahl interpretierbar ist. Bei der Zuweisung der Variable stellen wir durch einen Typecast (int) sicher, dass es sich bei der Variablen um eine Ganzzahl handelt.

Die Funktion is_int() ist übrigens unbrauchbar, da diese Funktion überprüft ob es sich bei der Variable um eine Ganzzahl handelt, also ob die Variable vom Typ Ganzzahl (integer) ist. Wir wollen das jedoch gar nicht wissen, wir wollen nur wissen, ob es sich um eine Variable – unabhängig vom Typ – handelt die wir als Ganzzahl interpretieren können.

EDIT Das ist natürlich schon paranoide Sicherheitsprogrammierung, doch dadurch stellt ihr sicher, dass eure Applikationen auch wirklich sicher sind. ;)
 
Zuletzt bearbeitet:
Nicht zwingend, da es bei einem Typecast durchaus vorkommen kann, dass bestimmte Zeichen in Zahlen umgewandelt werden, obwohl es keine sind.

Ich meinte in dem Zusammenhang, wenn man eine Zahl erwartet, dass dann ein (int) ausreicht, um sich abzusichern. Alles andere wird gefressen und wird im Zweifel zu einer 0 ;)

strip_tags() ist nicht wirklich sicher - es scheitert ja schon an nicht validem HTML, das wird einfach übergangen. Gut ist eine eigene Funktion, z.B.

PHP:
	$search = array('@<script[^>]*?>.*?</script>@si',  // Strip out javascript
		'@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
		'@<[\/\!]*?[^<>]*?>@si',            // Strip out HTML tags
		'@<![\s\S]*?--[ \t\n\r]*>@'        // Strip multi-line comments including CDATA
	);
	
	return preg_replace($search, '', $content);
 
Nein, steht sie eben nicht wirklich du Freak ... ist deine Capslock Taste kaputt? :D
 
Auch Reguläre Ausdrücke bieten keinen 100%igen Schutz, sind jedoch definitiv besser als strip_tags(). Hinzu kommt, dass preg_replace() ziemlich viel Leistung benötigt, im Gegensatz zum obigen Konstrukt mit is_numeric().
 
Wenn man andere Werte als Zahlen empfangen will, nützt is_numeric() nix. Vor dem Speichern von solchen Dingen wäre also ein einmaliges "aufräumen" angebracht. ;)
 
Natürlich, wenn wir die Validierung von Eingaben auf andere Anwendungsfälle erweitern, müssen andere Validierungsmethoden Anwendung finden. Hier würde ich allerdings einen anderen Weg gehen. Jeder Versuch Eingaben zu säubern hat nichts mit Sicherheit zu tun. Enthält eine Zeichenkette unerwünschte Elemente, so muss sie mit einem Fehler abgelehnt werden.

Beispiel:
PHP:
if (preg_match(array('<', '>'), $input_value)) {
  exit 'Fehler! Ungültige Zeichen enthalten';
}

Erwarten wir uns vorgegebene Werte (z. B. aus einer Auswahlliste (select)), so muss die Eingabe mit einer sogenannten Whitelistüberprüfung validiert werden.

Beispiel:
PHP:
$whitelist = array('Erlaubter Wert 1', 'Erlaubter Wert 2');

if (!in_array($input_value, $whitelist)) {
  exit 'Fehler! Ungültige Zeichen enthalten';
}

Nur ein paar Beispiele. Die meisten Sicherheitsbücher mit PHP behandeln dieses Thema sehr ausführlich. Folgende Bücher kann ich für Einsteiger und Fortgeschrittene sehr empfehlen:

Folgende Bücher habe ich auch noch hier, aber noch nicht gelesen:
 
Zurück
Oben