Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 04:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



HTML Code richtig kürzen

Discussion on HTML Code richtig kürzen within the Web Development forum part of the Coders Den category.

Reply
 
Old 01/28/2015, 22:39   #31

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
Quote:
Originally Posted by NotEnoughForYou View Post
1.Du pushst jeden tag der geöffnet wird auf den Stack.
2. Sobald du auf ein end Tag triffst holst du mit pop das letzte Tag-Element (dieser Art) das auf dem Stack liegt (last in - first out).
3. Wenn du dann durch bist mit deinem Durchgang und noch was auf dem Stack liegt zb. ein <a> weisst du, dass dieses a nicht geschlossen wurde.
4. Welches a es ist kannst du dann einfach abzählen wenn es zb. sonst kein a mehr im stack gibt ist es das 1. a in deinem Code, etc.

Funktioniert natürlich nur, wenn deine Schachtelung korrekt ist.
Ich habe das da oben mal in Punkte unterteilt.
Zum Punkt 2 ... mit array_pop bekomme ich nur das letzte raus und kein bestimmtes einer Art
Zum Punkt 4 ... wieso das erste a? kann doch genauso gut das letzte a sein. Und wie kann ich es denn einfach abzählen?

Edit:
Ich habe ein Problem mit meinem RegExp ...
Habe folgenden Code:
Code:
<(.*?)( .*?>|>)
Damit bekomme ich jeden HTML Tag, selbst <br /> und <img ... />. Das möchte ich aber nicht.
Ich weiß, dass ich eig. mit ^/ alles ausser den / suche, aber so funktioniert es leider nicht:
Code:
<(.*?)( .*?^/>|>)
Jemand eine Idee?
Mr.Tr33 is offline  
Old 01/28/2015, 23:11   #32
 
NotEnoughForYou's Avatar
 
elite*gold: 0
Join Date: Jun 2010
Posts: 3,406
Received Thanks: 2,024
Code:
<?php
class StackImplementation {
    private $array = array();
    
    
    public function __construct() {
    }
    
    
    public function push($elm) {
        $this->array[] = $elm;
    } 
    
   public function pop($elm) {        
        for($i=count($this->array)+1; $i>=0; $i--) {                
            if($this->array[$i] == str_replace("/", "", $elm)) {
                unset($this->array[$i]);            
                return;
            }
        }      
      
    }
    
    public function printArray() {
        print_r($this->array);
    }
    
    
}


$stack = new StackImplementation();
$text = "<pr>Das ist ein <pr>Absatz<p> </p><a href='#'>Link</a>";

preg_match_all("/\<.[^ >]*/", $text, $result);



for($i=0; $i<count($result[0]); $i++) {
    if(preg_match("/^\<[^\/].?[^ >]*$/", $result[0][$i])) {      
        $stack->push($result[0][$i].">");
    }
    else {
        $stack->pop($result[0][$i].">");
    }
}

$stack->printArray();



?>
ist nicht die eleganteste Version und nicht wirklich power tested, ist kurz runtergeschrieben, kann man natürlich noch erweitern / den Regex etwas verschönern (wie gesagt nicht wirklich groß getestet und runtergeschrieben), aber als Orientierung taugt es alle mal.

Im Array verbleiben dann nur die Tags die nicht geschlossen wurden.

Bsp: (am besten Source ankucken wegen den Tags sonst sieht man es nicht richtig)

Wenn du jetzt die nicht geschlossenen Tags hast, kannst du von deren Position im Array auf die Position im Code schließen und entsprechende Schlusstags einfügen.
NotEnoughForYou is offline  
Old 01/28/2015, 23:38   #33

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
Danke für dein Bemühen, jedoch habe ich glaube ich mit dem selben Zeitaufwand wie du ein etwas saubereren Code "hingeschissen" () der sein Ziel bis zum Ende durchzieht

Code:
if (preg_match_all ('~<(.*?)(>| (.*?)>)~s', $text, $match)){
	$aStack = array();
	for ($i = 0; $i < count($match[0]); $i++){
		if (substr($match[1][$i], 0, 1) != "/"){
			$aStack[$match[1][$i]]++;
			if (substr($match[3][$i], -1, 1) == "/") $aStack[$match[1][$i]]--;
		}else{
			$aStack[str_replace("/", "", $match[1][$i])]--;
		}
	}
	
	foreach ($aStack as $tag => $count){
		if ($count > 0){
			preg_match('~(.*?)<'.$tag.'~s', $text, $match);
			$text = $match[1];
			break;
		}
	}
}
Ich denke Zeile 2 und 6 könnte man eig. weglassen bzw. Zeile 6 in Zeile 4 mit einbauen
Aber fürs Erste funktioniert es
Danke für eure Denkanstösse :P
Mr.Tr33 is offline  
Old 01/29/2015, 02:39   #34
 
.StarSplash's Avatar
 
elite*gold: 74
The Black Market: 185/0/0
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
Sicherlich ist das mit dem Array keine schlechte oder gar falsche Lösung, aber wieso arbeitest du nicht mit einem "richtigen" Stack? ->

Das würde deinen Code imo wesentlich übersichtlicher machen. Zudem wäre es sicherlich eine gute Übung für dich, um dich mit dem Datentyp etwas vertraut zu machen.

Was mir gerade noch einfällt: Wenn dir die Tags eigentlich unwichtig sind, gäbe es noch diese Funktion:
.StarSplash is offline  
Old 01/29/2015, 10:35   #35
dotCom
 
Devsome's Avatar
 
elite*gold: 9842
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 16,843
Received Thanks: 4,675
tl;dr:

Wieso machst du auch

Code:
style="list-style-type: disc"
oder
Code:
style="color: #009900"
Dies könnte man schon mit einer CSS Datei lösen.
HTML:
Code:
<span class="1;">
CSS:
Code:
.1{
color: #009900;
}
Devsome is offline  
Old 01/29/2015, 10:46   #36

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
Quote:
Originally Posted by .StarSplash View Post
Sicherlich ist das mit dem Array keine schlechte oder gar falsche Lösung, aber wieso arbeitest du nicht mit einem "richtigen" Stack? ->

Das würde deinen Code imo wesentlich übersichtlicher machen. Zudem wäre es sicherlich eine gute Übung für dich, um dich mit dem Datentyp etwas vertraut zu machen.

Was mir gerade noch einfällt: Wenn dir die Tags eigentlich unwichtig sind, gäbe es noch diese Funktion:
Wieso ich das nicht benutzt habe? Ganz einfach
Mir wurde es falsch ans Herz gelegt und mit Arrays verglichen. Woher soll ich dann wissen, dass es SplStack gibt? Und unübersichtlich finde ich diese 10 Zeilen jetzt nicht wirklich, vll fehlen da 1-2 Kommentare aber geht voll.
Dazu ist es nie etwas wirklich falsch, wenn es am Ende schnell, simpel und richtig funktioniert. Ich denke sogar, dass meine Method theoretisch schneller funktioniert, als wenn ich die ganze Classe benutzen würde :P

An strip_tags habe ich auch schon mal gedacht, ich möchte jedoch schon meine langen Texte in HTML angezeigt bekommen, auch wenn diese gekürzt sind

@Devsome
Weil ich einen Text mit BBCodes habe und ihn in HTML umwandle.
Als ob ich das sonst auch machen würde Dafür würde ich mich voll hassen
Mr.Tr33 is offline  
Reply


Similar Threads Similar Threads
Code kürzen?
08/21/2014 - General Coding - 8 Replies
Guten Abend/Nacht liebe Comm, ich habe mal wieder ein Anligen(wie auch sonst), 1.) Wo genau liegt der Fehler an diesem Code? import java.awt.*; import java.util.Random; import javax.swing.*;
Code kürzen?
07/13/2014 - General Coding - 4 Replies
Hey Leute! Hab folgendes Problem, ich will einen Längeren Code kürzen damit der ganze Code besser aussieht, funktionieren tut es nur habe ich 1 Problem: Wenn ich diesen Code: " " So kürze:
HTML-Code?
10/14/2013 - Off Topic - 2 Replies
Habe da mal eine Frage... dort unten steht immer "HTML-Code aus" wie aktiviert man das? Und kann man eigentlich auf Elitepvpers HTML-Codes einfügen?
[HTML]Text richtig positionieren?
07/07/2012 - Web Development - 5 Replies
Hallo, Ich hab ein kleines Problem, und zwar bin ich sehr neu in der HTML Welt und ich schaffe es irgendwie nicht den Text unter das Login Formular zu kriegen. Hier ein Bild: http://www.bilder-hochladen.net/files/iy9r-1t-ea5d .png Und hier der Code: <td background="include/designs/design_22/images/ bg_m2-4-6.jpg" width="4">&nbsp;</td> <td background="include/designs/design_22/images/ bg_m7.jpg" width="155" align="left" valign="top">



All times are GMT +1. The time now is 04:27.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.