Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
ist preg_replace die richtige Lösung? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
ist preg_replace die richtige Lösung?


 
Fanello
19-01-2007, 11:19 
 
Liebe XML-Spezialisten

Hoffentlich habe ich mit diesem Anliegen mehr Erfolg bei euch als mit meinen letzten Fragen...:rolleyes:

Also, ich erhalte aus einem InDesign-XML-Export ein XML-File (das kann z.B. ein Zeitungs-Artikel sein). Dieses File will ich mit Hilfe von XSL in ein HTML umwandeln, soweit bin ich und es sieht sogar gut aus.
In diesem Artikel kann es vorkommen, dass URL's aufgeführt sind, so in diesem Stil: "...für weitere Informationen besuchen Sie auch die Homepage der Firma, www.firma.ch"
Damit diese URL aber im HTML-File auch anklickbar ist, müsste ich ja die URL in einen Link umwandeln.
Gibt es eine Möglichkeit, per XSL z.B. nach www.*.* zu suchen und diesen in ein ahref einzupacken?

Vielen Dank für eure Hilfe

 
Anbu
19-01-2007, 13:26 
 
tut mir leid hab heut erst mit xml/xsl/DTD angefangen bekomm eigentlich noch nichts hin :D

wär doch alles wie PHP

 
Anbu
19-01-2007, 13:29 
 
vielleicht hilft dir ja das weiter


4.4 Handling Trackable Urls
4.4.1 Handling Simple Links
Example: The template contains an element ’link’, in which the user can enter web addresses.
Users may enter simple http addresses, or use the Inxmail url tags. The XSL has to make sure
that it can handle both correctly.
If the mailing editor enters a link with an Inxmail url tag, or the link contains href (meaning the
user entered a valid HTML anchor tag), output the element value without escaping. Otherwise,
create the HTML anchor tag using the element value with escaping:
<xsl:choose>
<xsl:when test="contains( link, ’[%url’ )">
<xsl:value−of disable−output−escaping = "yes" select="link"/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="contains( link, ’href=’ )">
<xsl:value−of disable−output−escaping = "yes" select="link"/>
</xsl:when>
<xsl:otherwise>
<a><xsl:attribute name="href">
<xsl:value−of select="link"/>
</xsl:attribute>
<xsl:value−of select="link"/></a>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
4.4.2 Handling Links With Images
If you want to create trackable links with images, you first have to check if the link is trackable.
If so, parse the link description and create a new link which uses the given image:
<xsl:choose>
<xsl:when test="contains( link, ’[%url’ )">
<xsl:call−template name="createtracklink">
<xsl:with−param name="url" select="link"/>
<xsl:with−param name="image" select="image"/>
</xsl:call−template>
</xsl:when>
<xsl:otherwise>
<a href="{link}"><img border="0" src={image}/>></a>
</xsl:otherwise>
</xsl:choose>
<xsl:template name="createtracklink">
<xsl:param name="url"/>
<xsl:param name="image"/>
<xsl:value−of select="substring-before($url,’]’)"/><xsl:text>;</xsl:text>
<img border="0" src="$image"/>

 
Fanello
19-01-2007, 13:43 
 
Liebe PHP-Spezialisten

Mal vorab.. ich hab das gleiche Problem schon in der XML-Abteilung gestellt um zu wissen, ob es per xsl machbar wäre. Denke aber dass es auch über PHP möglich sein müsste.

Folgendes: von einem InDesign-Dokument (in diesem Fall ein Zeitungsartikel) wird ein XML exportiert. Dieses XML rufe ich mit PHP auf und wandle es on-the-fly mit XSL um.

Dabei wird der ganze Inhalt in den String $html3 geschrieben. Jetzt kann es vorkommen, dass in diesem Artikel eine Internet-Adresse vorkommt, also z.B. "...mehr erfahren Sie auch auf der Internet-Seite des Herstellers: www.hersteller.ch".
Bei der Umwandlung von XML zu HTML passiert nun natürlich mit dieser URL gar nichts, sie erscheint also auch im HTML als Text. Ich würde jetzt aber gerne jeweils den ganzen String vor der Anzeige durchsuchen lassen, nach Internet-Adressen suchen und diese in eine ahref packen.

Wäre da preg_replace ein richtiger Ansatz? Könnte ich damit z.B. nach www.*.* suchen?

Vielen Dank für eure Hilfe.

ach ja.. da ist noch der PHP-Code, der das XML-File mit Hilfe von XSL in HTML umwandelt.

<?php

$xml = new DomDocument();
$xml->load("xmlneu/artikel.xml");
if(!$xml) {
exit ("Fehler beim Parsen des Artikels");
}

$xslt = new DomDocument();
$xslt->load("xsl/anzeiger_template.xsl");
//$xslt->load("xsl/test2.xsl");
if(!$xslt) {
print ("Fehler bei XSLT");
exit();
}

$xsltproc = new XsltProcessor();
if(!$xsltproc) {
exit ("Fehler beim Erstellen des XSLT-Prozessors");
}

$xsltproc -> importStylesheet($xslt);

$html3 .= ($xsltproc ->transformToXml($xml));


print $html3;

?>

 
Wyveres
19-01-2007, 13:53 
 
Original geschrieben von Fanello
Wäre da preg_replace ein richtiger Ansatz? Könnte ich damit z.B. nach www.*.* suchen?


Salopp gesagt !ja!

falls dir anwendungsbeispiele fehlen und wie du das umsetzten kannst

http://regexp-evaluator.de

die seite hat mir persönlich sehr weiter geholfen.

 
jahlives
19-01-2007, 13:59 
 
Kommt sehr darauf an wie die Links im Text stehen. Kommt vorher ein http:// ? Weil nicht jeder Link mit www beginnen muss wird es sonst schwierig den Anfang einer Linkadresse mit Sicherheit festzustellen. Gesetzt den Fall, dass jeder Link mit www beginnen würde, könntest du folgendes probieren

$reg = '/(www\\.[^\\s]*)/is';
$str = preg_replace($reg,'<a href="\\1">\\1</a>',$deinString);

Gruss

tobi

p.s. kannst hier (http://regexp-evaluator.de/evaluator/e8579a318167653a328bf9b91d08b2f6/#ergebnis) sehr gut RegExp testen

 
Fanello
19-01-2007, 14:19 
 
wow.. das mit dem regexp-Evaluator ist fantastisch...:rocks:

ich habs hingekriegt.. vielen Dank!!!

mein Code für die Nachwelt...;)

<?php

$xml = new DomDocument();
$xml->load("xml/REX_VALUE[1]");
if(!$xml) {
exit ("Fehler beim Parsen des Artikels");
}

$xslt = new DomDocument();
$xslt->load("xsl/xml2php.xsl");
if(!$xslt) {
print ("Fehler bei XSLT");
exit();
}

$xsltproc = new XsltProcessor();
if(!$xsltproc) {
exit ("Fehler beim Erstellen des XSLT-Prozessors");
}

$xsltproc -> importStylesheet($xslt);

$html3 .= ($xsltproc ->transformToXml($xml));

//
// Text, der durchsucht werden soll
//
$subject = $html3;
//
// Der Reguläre Ausdruck
//
$pattern = '=(www\.[^\s]*)=is';
//
// Ersatzstring
//
$replace = '<a target="_blank" href="http://\1">\1</a>';
//
// RegExp auswerten, Ersetzung durchführen
//
$result = preg_replace($pattern, $replace, $subject);
//
// Ergebnis ausgeben
//
print $result;


?>

 
Fanello
19-01-2007, 14:41 
 
natürlich musste jetzt doch noch ein neues Problem auftauchen...:mad:

also, die Transformation klappt einwandfrei, wenn sich die www-Adresse irgendwo im Text befindet. Wenn aber z.B. der Titel eines Abschnitts nur aus einer URL besteht, dann gibts Probleme...

Also würde es z.B. beim Titel

<h5>www.adresse.ch</h5>

folgenden Link machen:

http://www.adresse.ch</h5>

Klar, die Information ist ja, dass er alles bis zum ersten Leerzeichen nehmen soll.. könnte man jetzt auch noch eine weitere Bedingung einbauen?

habs gleich selber rausgefunden...
muss den $pattern-Teil mit diesem Ersetzen.. ich hab einfach noch ne '<' hinzugefügt;)

$pattern = '=(www\.[^|<\s]*)=is';


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