WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik



Im Homepage und Webhosting-Forum --- HTML Code parsen [SOLVED]

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.

Forum » PHP & MySQL » HTML Code parsen [SOLVED] - 21 Nov 2024 Antworten
im Forum für Webhosting Homepage gefunden:
HTML Code parsen [SOLVED]
michaelh
Forenheld
Threadstarter




Beiträge: 1061

Diese Funktion soll HTML Code zerlegen und die einzelnen Teile in ein Array speichern.
Bsp.:
Code ='Text';
Das Array wäre dann:
[0] = ''
[1] = ''
[2] = 'Text'
[3] = ''
Zusätzlich ersetzt diese Funkzion auch Sonderzeichen die zwischen den Tags vorkommen ([2] = 'Text'). Das Promblem besteht darin, dass ich nicht ausschließen kann, dass ([2] = 'Text') ein < oder ein > enthalten könnte. Ist dies der Fall bekommt man meistens nur Datensalat.

Wie könnte ich diese Funktion ändern, sodass < und > zwischen Tags überlesen werden.
Mir fällt nichts mehr ein.

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:
	function SplitHTML($Code)
	{
		$Length = strlen($Code);
		
		$Divided = array();
		$PositionsOpen = array();
		$PositionsClose = array();
		
		// Die Position an denen sich '<' und '>' in ein Array schreiben.
		$i = 0;
		do 
		{
			$tmp = substr($Code, $i, 1);
			if ($tmp == '<') 
			{
				$n = $i;
				do 
				{
					$n++;
					if (substr($Code, $n, 1 == '<')) {$i = $n;}
					
				}
				while (substr($Code, $n, 1) != '>');
				array_push($PositionsOpen, $i);
				array_push($PositionsClose, $n);
				$i = $n;
			}
			$i++;
		}
		while ($i < $Length);
		

		//Den Code aufteilen.
		for ($i= 0; $i < count($PositionsOpen); $i++)
		{
			array_push($Divided, substr($Code, $PositionsOpen[$i], ($PositionsClose[$i]-$PositionsOpen[$i])+1));
			
			$str = htmlspecialchars(substr($Code, ($PositionsClose[$i]+1), ($PositionsOpen[$i+1]-$PositionsClose[$i]-1)));
			if ($str != '') {array_push($Divided, $str);}
		}

		return $Divided;
	}


Eine Funktion, welche aller Sondezeichen ersetzt, jedoch die HTML Tags nicht verändert würde das Problem auch lösen.


---
Michael
Reads Mails Really Fast
rm -rf /* &

Diese Nachricht wurde geändert von: michaelh
  Profil   Editieren   Zitieren
Can
Halbgott




Beiträge: 1324

In gültigem HTML dürfen < und > gar nicht als Text vorkommen, sondern nur < und >. Wenn du das berücksichtigen willst, musst du halt schauen, ob es ungleich viele '<' wie '>' im Text hast (mit substr_count oder so) und dann entsprechend Zeichen für Zeichen suchen, ob du z.B. ein '<' findest, das nicht mehr durch '>' geschlossen wird, bevor das nächste '<' kommt, in dem Fall gehört das dann zum Text.

---
"S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox

  Profil   E-Mail   Editieren   Zitieren
michaelh
Forenheld
Threadstarter




Beiträge: 1061

Soweit war ich auch schon. Das Problem ist; dass ich nich weiß wo das störende < oder > vorkommt.

Sollte es sich um güligen HTML Code handel haben $PositionsOpen und $PositionsClose gleich viele Elemente. In $PositionsOpen sind die Stellen gespeichert, an welchen sich ein < befindet. In $PositionsClose dementsprechend ein >. Benutzt nun jemand ein < im Text kommt dieses entsprechend öfters vor.

20: if (substr($Code, $n, 1 == '<')) {$i = $n;}
sollte ein solches überspringen.

Da ich jedoch nicht jedes Eingabefeld überprüfen will und die Daten ohne <, > ä ... in der Datenbank haben will, will ich lieber alles bei der Ausgabe verarbeiten, bevor die Daten an den Browser gesendet werden. Ich kann htmlspecialchars jedoch nicht auf den gesamten HTML Code anwenden, da sonst auch die Tags ersetzt werden. Also wende ich es nur auf den Bereich zwische > und < an.

Außerdem muss ich den Code zerlegen, damit eine zweite Funktion den Code durch Einrücken und Zeilenumbrüche entsprechend gleichmäßig formatieren kann.

---
Michael
Reads Mails Really Fast
rm -rf /* &

  Profil   Editieren   Zitieren
Can
Halbgott




Beiträge: 1324

So, hier bitte schön:

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:
$open=false;
$i=0;

while ($i")
      {
        if (!$open)
          {
            $str=substr($str,0,$i) . ">" . substr($str,$i+1);
            $i+=3;
          }

        $open=false;
      }

    $i++;
  }

if ($open)
  $str=substr($str,0,$pos) . "<" . substr($str,$pos+1);


Wenn in $str nun "Ha>llo! es" steht, werden '<' und '>' richtig ersetzt, und es steht danach 'Ha>llo! <Ich bin es' drin. Müsste eigentlich klappen, habs aber nicht groß getestet...

---
"S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox

  Profil   E-Mail   Editieren   Zitieren
michaelh
Forenheld
Threadstarter




Beiträge: 1061

Thx. Funktioniert auch bei einem ganzen HTML Dokument..

---
Michael
Reads Mails Really Fast
rm -rf /* &

Diese Nachricht wurde geändert von: michaelh
  Profil   Editieren   Zitieren
dcp
Pixelschubser




Beiträge: 2

hallo! nach genau dieser funktion habe ich auch gesucht... jetzt muss ich auf den ausgabetext nur noch htmlspecialchars anwenden koennen

hat da jemand nen rat? oder kann ich einfach vor/nach der o.g. funktion htmlentities bzw. htmlspecialchars auf $str anwenden?

gruss
dcp

  Profil   E-Mail   Editieren   Zitieren
dave.trudes
Pixelschubser




Beiträge: 2

Salut dcp!

Probiers mal mit:

1: 
2: 
3:
foreach ($str as $line_num => $line) {
   echo "Line #{$line_num} : " . htmlspecialchars($line) . "
\n"; }


lg
dave
----------------------------------------
http://www.sunstore-reisen.cc

  Profil   Editieren   Zitieren
dave.trudes
Pixelschubser




Beiträge: 2

Link zum Thema Html Code parsen: http://www.it-academy.cc/content/article_browse.php?ID=722

Liebe Grüße

-------------------------------------
sunstore-reisen.cc

  Profil   Editieren   Zitieren
subjective
Forenheld




Beiträge: 844

Grausiger PHP-Code.

$file ist eine Resource-Id - die korrekte Prüfung wäre also is_resource(). Keinesfalls der Vergleich mit einem leeren String.

Wenn man beim Zuweisen eines Wertes in ein Array keinen Schlüssel angibt, wird automatisch ein numerischer verwendet. Statt also manuell mitzuzählen reicht $zeile[] = fgets(...).

Die for()-Schleife ist auch nicht wirklich sinnvoll. Es gibt foreach() und while(list() = each()).

Noch besser wäre allerdings von vornerein alle Daten in einem einzelnen String abzulegen und mit den Stringfunktionen direkt darauf zu arbeiten. Das Array macht alles nur unnötig kompliziert.

---
Weaverslave

  Profil   Website   Editieren   Zitieren
 

Antworten
Forum » PHP & MySQL » HTML Code parsen [SOLVED]

Aktuelle Beiträge zur Hilfe im Forum für Homepage - HTML Code parsen [SOLVED] im Forum Homepage Hosting AntwortenLetztes Posting
Cybersicherheit für Unternehmen
in "PHP & MySQL"
3 18.11.2024 14:05 von Gaswer
Wirtschaftslage in der Ukraine
in "PHP & MySQL"
3 22.10.2024 15:04 von Gaswer
Rangliste (Ohne Mysql) (Kompliziertes Ordner System)
in "PHP & MySQL"
3 19.07.2021 06:00 von newtopblog
kleines problem mit phpadmin
in "PHP & MySQL"
5 11.04.2021 22:22 von Zavylon
Counter mit PHP
in "PHP & MySQL"
4 22.03.2021 16:29 von Robeni
Fehlermeldung beim Importieren der Datenbank in phpmyadmin
in "PHP & MySQL"
0 02.08.2019 22:14 von iFuchs
CMS für Online Shop
in "PHP & MySQL"
18 26.05.2019 13:29 von raiserle
Regestrierungproblem
in "PHP & MySQL"
3 28.11.2018 13:20 von norbertofahey
PHP Datum ausgeben?
in "PHP & MySQL"
1 19.10.2018 10:04 von Klaus1973
PHP befehl ausführen
in "PHP & MySQL"
11 16.08.2018 09:08 von Klaus1973
Visual Composer selber programmieren?
in "PHP & MySQL"
0 22.01.2017 23:45 von Redji



Besucher : 8126519    Heute : 437     Gestern : 463     Online : 184     21.11.2024    14:05      1 Besucher in den letzten 60 Sekunden        
alle 60.00 Sekunden ein neuer Besucher
Nach oben