Portal > Foren > PHP > PHP-Programmierung > Strings vergleichen über 2 Zeilen
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 05.06.2007, 21:29 Nach oben    #1
Erfahrener Benutzer
 
Benutzerbild von Garnele
 
Registriert seit: 16.09.2005
Ort: CH :-)
Beiträge: 123
Standard Strings vergleichen über 2 Zeilen

Hallo Forum

Ich habe (wieder einmal) eine Frage: Aussgangslage ist ein kleines Script, wo der User etwas eintragen kann. In diesem speziellen Fall soll die nun der beginn einer HTML Datei sein:

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
Dieser Code geht also über zwei Zeilen. Oke, kein Problem dachte ich und entwickelte folgendes Script:

PHP-Code:
<?PHP
  
// Stimmts?
  
$solution 
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
       \"http://www.w3.org/TR/html4/loose.dtd\">"
//Das ist die richtige Lösung
  
$solution addslashes($solution);
  if (
$_POST['solu'] == $solution)
  {
    
readfile("irgendwas.php");
  }
  else
  {
    
readfile("sonstwas.php");
  }
  
?>
Nun sagt mir PHP die beiden Strings nicht gleich. Das kann ich allerdings nicht verstehen, lasse ich mir die beiden Strings ausgeben sind sie identisch. Ich habe dann einmal den md5 String der beiden berechnen lassen und siehe da, auch dieser war nicht gleich. Was habe ich übersehen?

Ich bin dankbar für alle Antworten.

Einen schönen Abend wünscht Garnele
__________________
Mein Forum zu Thema Garnelen und Wirbellose: http://www.garnelenforum.ch
Garnele ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.06.2007, 22:18 Nach oben    #2
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Lass Dir doch mal beide Strings mit <pre> und var_dump() ausgeben und schau, was passiert.
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.06.2007, 23:40 Nach oben    #3
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 306
Standard

Ich tippe auf ein Umbruch- (\n vs \r\n) oder "Leerzeichen vs. Tabs"-Problem
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.

Geändert von Bleistift (07.06.2007 um 08:54 Uhr)
Bleistift ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2007, 10:01 Nach oben    #4
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Ja, das wird es sein. Es gibt ja drei übliche Wege, einen Zeilenumbruch darszustellen:

ASCII 10 bzw. \n (Linux etc.)
ASCII 13 bzw. \r (Mac)
ASCII 13 + ASCII 10 bzw. \r\n (Microsoft)

Im Quellcode solltest du direkt ein\n einfügen und keinen Zeilenumbruch, dann dem sieht man ja nicht an, wie der kodiert ist. Dann kannst du beim übergebenen String 1. alle \r\n in \n umwandeln und 2. alle \r in \n. Dann vergleichen. Was die Leerzeichen resp. Tabs angeht hängt es ganz davon ab, wie die "richtige Lösung" definierst. Im einfachsten Fall via preg_replace() alle Stellen, die entweder einen oder mehrere Tabs oder eine Mischung mehr als 2 Byte lange beliebige Kombination aus Tabs und Leerzeichen enthalten durch ein einzelnes Leerzeichen ersetzen und dann vergleichen (mit einem String, bei dem das natürlich auch so gemacht wurde).

Basti

Geändert von Basti (06.06.2007 um 10:23 Uhr)
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2007, 17:13 Nach oben    #5
Erfahrener Benutzer
 
Benutzerbild von Garnele
 
Registriert seit: 16.09.2005
Ort: CH :-)
Beiträge: 123
Standard

Hallo

Danke vielmals, jetzt klappt es und wieder einmal habe ich etwas gelernt *juhu*. Dennoch bleibt bei mir noch eine kleine Verständnisslücke:

PHP-Code:
<?PHP
  
// Stimmts?
  
$solution 
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">"// Lösung
  
$solution addslashes($solution);
  
$solu preg_replace('/\s\s+/'' '$_POST['solu']); // Ersetzt 2 und mehr Leerzeichen und Tabs durch ein Leerzeichen
  
$solu str_replace("\r\n""\n"$solu);
  
$solu str_replace("\r""\n"$solu);
  if (
$solu == $solution)
  {
    
readfile("irgendwas.php");
  }
  else
  {
    
readfile("sonstwas.php");
  }
  
?>
Wenn ich jetzt jedoch
Code:
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \n\"http://www.w3.org/TR/html4/loose.dtd\">
als Lösung angebe stimmt es nicht mehr. Das ganze habe ich jedoch mit Windows übergeben und dann ja alle \r\n in \n umgewandelt. Dennoch scheint es im übergebenen Text kein \n bzw. \r\n zu beinhalten. Wieso?

Ich danke allen, Garnele

[Edit: Lol, habs gerade selbst gemerkt: ich ersetze ja sämtliche "grösser als 2Byt" teile in ein Leerzeichen, dann verwandelt er mir natürlich auch \r\n etc. in einen Leerzeichen um. Immerhin habe ich jetzt was ich haben wollte ]
__________________
Mein Forum zu Thema Garnelen und Wirbellose: http://www.garnelenforum.ch

Geändert von Garnele (06.06.2007 um 17:35 Uhr) Grund: Fehler gefunden :-)
Garnele ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL] Tabellen vergleichen Sclot Datenbanken 0 31.01.2007 12:47
Mehrere Zeilen auslesen. Jan Datenbanken 17 27.06.2006 16:49
String - Zeilen und Zeichen Prophet Allgemeine Java-Programmierung 5 28.05.2006 23:33
Zeitdifferenzen vergleichen robo47 Datenbanken 5 14.05.2006 11:15
BufferedImage vergleichen Xean Desktop-Applikationen und Grafik 10 01.01.2006 12:14


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45