|
You last visited: Today at 04:27
Advertisement
HTML Code richtig kürzen
Discussion on HTML Code richtig kürzen within the Web Development forum part of the Coders Den category.
01/28/2015, 22:39
|
#31
|
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
|
Quote:
Originally Posted by NotEnoughForYou
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:
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:
Jemand eine Idee?
|
|
|
01/28/2015, 23:11
|
#32
|
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.
|
|
|
01/28/2015, 23:38
|
#33
|
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
|
|
|
01/29/2015, 02:39
|
#34
|
elite*gold: 74
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:
|
|
|
01/29/2015, 10:35
|
#35
|
dotCom
elite*gold: 9842
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: CSS:
Code:
.1{
color: #009900;
}
|
|
|
01/29/2015, 10:46
|
#36
|
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
|
Quote:
Originally Posted by .StarSplash
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
|
|
|
 |
|
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"> </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.
|
|