php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 28-09-2010, 22:03
c-bob
 Registrierter Benutzer
Links : Onlinestatus : c-bob ist offline
Registriert seit: Sep 2010
Beiträge: 5
c-bob befindet sich auf einem aufstrebenden Ast
Standard Regex-Problem

Ich habe folgendes Problem:

Aus einem String wie dem folgenden benötige ich die Angaben aus width und height, wobei aber nicht unbedingt festgelegt ist, in welcher Reihenfolge die Attribute innerhalb des img-Tags stehen (was das eigentliche Problem ist)

PHP-Code:
<p style="text-align: center;">
##<img style="vertical-align: middle; border: 1px solid #000000;" src="/images/bilder/hund.jpg" alt="ein bild" width="500" height="375" />
</p>
<
p>text text text text ... </p
Ich habe mit folgendem Ausdruck schon ein wenig erhalten, allerdings zeigt er mir nur was an, wenn die Reiehnfolge von width und height auch stimmt:

PHP-Code:
!##(<img (.*?).width="(.*?)".height="(.*?)".*?>)! 
Wenn im String die Reihenfolge verstauscht ist, funktioniert es nicht. Was muss ich anders machen?
Geht das überhaupt zu bewerkstelligen?

Vielen Dank schonmal
-C-
Mit Zitat antworten
  #2 (permalink)  
Alt 28-09-2010, 22:46
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

XML-basierte Dokumente behandelt man nicht mit RegEx sondern mit DOMDocument und DOMXPath. Du wirst feststellen, dass das nicht nur sauberer sondern auch leichter ist.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 28-09-2010, 22:55
c-bob
 Registrierter Benutzer
Links : Onlinestatus : c-bob ist offline
Registriert seit: Sep 2010
Beiträge: 5
c-bob befindet sich auf einem aufstrebenden Ast
Standard

Hm, sieht so nicht schlecht aus, aber ich möchte ja kein ganzes Dokument bearbeiten - es soll lediglich ein definiertes img-Tag sein.
Im Grunde genommen sollte das ja möglich sien. Aber irgendwie komme ich drauf :-/
Mit Zitat antworten
  #4 (permalink)  
Alt 28-09-2010, 23:09
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Wenn das Dokument nicht mehrere MB groß ist, kommst du mit XPath trotzdem besser.

Wenn du auf deinem RegEx-Kram bestehen willst, musst du alle möglichen Alternativen notieren (mit |).
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 29-09-2010, 05:39
c-bob
 Registrierter Benutzer
Links : Onlinestatus : c-bob ist offline
Registriert seit: Sep 2010
Beiträge: 5
c-bob befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Wenn das Dokument nicht mehrere MB groß ist, kommst du mit XPath trotzdem besser.

Wenn du auf deinem RegEx-Kram bestehen willst, musst du alle möglichen Alternativen notieren (mit |).
JaNein, erstmal nochmal danke für die schnellen Antworten. Ich will garnicht auf die Regex bestehen - bin da offen für alle Alternativen. Kenne XPath nur nicht und beim Überfliegen der Doc kam mir das ähnlich komplex wie Regex vor, aber es scheint mir so zu sein, dass XPath eher für ganze Dateien gedacht. Konnte aber noch nicht testen, ob es schon bei einzelnen Tags sinnvoll einzusetzen ist.

Kannst Du auf die Schnelle mit obigem <img>-tag ein Beispiel geben?

Grüße
_c_
Mit Zitat antworten
  #6 (permalink)  
Alt 29-09-2010, 05:52
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

PHP-Code:
// angenommen $doc ist dein bereits geladenes Dokument

// XPath-Objekt erzeugen
$xp = new DomXPath($doc);

// Auf Plaintext-Ausgabe umschalten
header("Content-Type: text/plain");

// alle img-Elemente holen, die width und height besitzen
foreach ($xp->query("//img[@width and @height]") as $k => $elem) {

    
// formatierte Plaintext-Ausgabe der Bildinformationen
    
echo $k 1". ["$elem->getAttribute("src"), "]\n";
    echo 
"\tBreite: "$elem->getAttribute("width"), "px\n";
    echo 
"\tHöhe: "$elem->getAttribute("height"), "px\n\n";

__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 29-09-2010, 07:57
c-bob
 Registrierter Benutzer
Links : Onlinestatus : c-bob ist offline
Registriert seit: Sep 2010
Beiträge: 5
c-bob befindet sich auf einem aufstrebenden Ast
Standard

Hm, sag mal, schläfst Du garnicht?! ;-)

Ich habe das mal versucht und etwas abgeändert. Wie gesagt, ich habe kein komplettes html-file, ist nur eine kurze kette von tags, welche aus ner mysql kommt. Daher nicht loadHTMLfile. header() funktioniert demnach auch nicht. Aber es funktioniert dann doch irgendwie nicht:

PHP-Code:
$doc = new DOMDocument();
$doc->loadHTML($row);
$xp = new DomXPath($doc);

// Auf Plaintext-Ausgabe umschalten
//header("Content-Type: text/plain");
var_dump($xp);
// alle img-Elemente holen, die width und height besitzen
foreach ($xp->query("//img[@width and @height]") as $k => $elem) {

    
// formatierte Plaintext-Ausgabe der Bildinformationen
    
echo $k 1". ["$elem->getAttribute("src"), "]\n";
    echo 
"\tBreite: "$elem->getAttribute("width"), "px\n";
    echo 
"\tHöhe: "$elem->getAttribute("height"), "px\n\n";

das var_dump war nur zur überprüfung drin - da kommt aber nichtmal etwas raus?!
Mit Zitat antworten
  #8 (permalink)  
Alt 29-09-2010, 10:57
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Wenn deine $row wie der Name vermuteln lässt, ein ganzer Datensatz ist, kann ich mir schon vorstellen, warum es nicht funktioniert. Dreh mal dein Error-Reporting auf, so wie es in den Regeln steht.

Wie kommt man eigentlich auf die unsinnige Idee, HTML-Schnipsel in einer DB zu speichern?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 29-09-2010, 15:50
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Wie kommt man eigentlich auf die unsinnige Idee, HTML-Schnipsel in einer DB zu speichern?
Offtopic:
Was ist daran so unsinnig?
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #10 (permalink)  
Alt 29-09-2010, 16:22
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

In eine DB gehören reine Nutzdaten, also Informationen. Daten mit einer internen Struktur lassen sich auf SQL-Ebene nicht vernünftig verwalten (filtern, sortieren, ...) und sind potentiell gefährlich, weil sie einer Sonderbehandlung beim regulären Kontextwechsel bedürfen. Unnötig ist es außerdem, weil es keine Datenstruktur gibt, die sich nicht auch relational in einer Datenbank abbilden ließe.

Zu c-bobs Fall: es ist ja offensichtlich, dass es sinnlose Arbeit ist, die Bildinformationen jedes Mal aus dem HTML-Code in der DB rauszupicken. Würdest du diese Infos in einer Tabelle mit den Spalten (id, src, alt, width, height) speichern, müsstest du sie nur einmal beim Insert aus dem Quelltext lesen und dann kannst du sie beliebig oft bequem abrufen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #11 (permalink)  
Alt 29-09-2010, 16:36
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Zu c-bob:
Ich würde hier eigentlich keinen Quelltext befragen, sondern dass Bild selbst, wenn ich wissen will, wie groß es ist.

AmicaNoctis:
Ich stimme dir mit dem Argument mit den reinen Nutzdaten prinzipiell zu, aber bei einfachen Artikeln mache ich mir beim besten Willen nicht die Arbeit, dass ganze Html aufzudröseln und relational abzubilden um dann den Weg wieder umgekehrt gehen zu können, wenn ich das Html wieder brauche.

Andersrum gefragt:
Du hast irgendwo einen Html-Editor mit dem du Artikel verfasst - kein ganzes Html-Dokument, sondern eben nur ein Fragment. Dieses willst du speichern und später einfach wieder nutzen können. Wie gehst du vor?

Evtl. kannst du die Diskussion hier ausgliedern und verschieben.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #12 (permalink)  
Alt 29-09-2010, 17:06
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Quetschi Beitrag anzeigen
Andersrum gefragt:
Du hast irgendwo einen Html-Editor mit dem du Artikel verfasst - kein ganzes Html-Dokument, sondern eben nur ein Fragment. Dieses willst du speichern und später einfach wieder nutzen können. Wie gehst du vor?
Entweder in der DB als Nested Sets abbilden oder als XML im Dateisystem ablegen und in der DB den Pfad/Dateinamen speichern.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #13 (permalink)  
Alt 29-09-2010, 17:30
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Xml-Files mit Pfad dazu in DB:
Würde bedeuten, dass ich je nach Seite nach dem DB-Zugriff nochmal eine kleinere oder größere Anzahl an Zugriffen auf das Dateisystem brauche - können durchaus mal 50 Zugriffe oder mehr sein. Einen richtigen Vorteil für diese Vorgehensweise gegenüber der direkten Speicherung des Fragments in der DB kann ich nicht wirklich erkennen.

Abbildung als Nested Sets:
Natürlich die schönere Variante, vor allem im Hinblick mit den Daten ggf. auch mal "arbeiten" zu können (Suche usw.). Allerdings vermute ich, dass das bei größeren Artikeln und/oder einer größeren Anzahl an Artikeln in einer Seite für das Auslesen und Zusammensetzen der Html-Struktur doch unnötig Rechenleistung draufgeht.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #14 (permalink)  
Alt 29-09-2010, 17:46
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Im Normalfall hab ich in der DB die Nutzdaten und im Dateisystem XSLT-Templates, die dann mit diesen Nutzdaten gefüttert werden. Nehmen wir mal an, dass die Templates modular aufgebaut sind, sich also gegenseitig includieren, dann hat man vielleicht 1 bis 4 Dateizugriffe. Tut das PHP weh? Ich glaube nicht. In vielen Fällen ist es sogar schneller als eine komplexe DB-Abfrage.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #15 (permalink)  
Alt 29-09-2010, 18:28
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Nein, Templates includieren bei mir keine anderen Templates - was wo hinkommt, ist bei mir rein in der DB geregelt.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Regex Problem DrWeb PHP Developer Forum 1 01-06-2008 21:40
[REGEX] problem mit regex kyo PHP Developer Forum 4 27-10-2006 07:45
[REGEX] Problem mit Regex in .htaccess daniel987 Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 2 21-06-2005 00:10
regex-problem Der X-Ray PHP Developer Forum 3 11-06-2005 15:33
RegEx Problem Pascal P. PHP Developer Forum 10 23-12-2002 18:07

Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:28 Uhr.