Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Substr auswerten (https://www.delphipraxis.net/1656-%5Bphp%5D-substr-auswerten.html)

CalganX 16. Dez 2002 17:38


[PHP] Substr auswerten
 
Hi,
also, ich habe jetzt bspw. folgenden Lexikoneintrag (Source):
Zitat:

Zitat von Irgendwer
RAM steht für Random Access Memory. Es wird genutzt in Verbindung mit dem [keyword=Arbeitsspeicher]Arbeitsspeicher[/keyword].

So, nun soll der Text "Arbeitsspeicher" als Link erschienen, dieser soll zu einer Datei (index.php) führen und der Link soll Parameter enthalten. Einer davon ist das Attribut von Keyword (in diesem Fall Arbeitsspeicher). (Genauer gesagt eine ID, diese wird aber durch eine Funktion von einem String in eine ID umgeandelt)
Das ganze klappt auch, nur das Problem: Wie bekomme ich das Attribut heraus? Das dürfte mit Regular Expressions funktionieren, nur da hab' ich null Durchblick...

Chris

kristoff 16. Dez 2002 19:25

Hi,
komisches Delphi-Forum,
aber jetzt zur möglichen Antwort.


(http://www.php.net/manual/en/function.preg-replace.php)

Function:
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
RegEx.(perl comp.):


erstes Argument:
/\[(.*?\=.*?\)])/Uis
zweites Argument:
\<a href=\"index.php\?\\1\"\>\<\\a>

Ich hab' zar nicht probiert, müsste aber stimmen.

bye k.

Chewie 16. Dez 2002 20:39

Zitat:

Zitat von kristoff
Hi,
komisches Delphi-Forum

Eine kleine PHP-Frage zwischendruch hält fit :)

CalganX 17. Dez 2002 12:45

Hi,
danke, aber leider funktioniert es nicht. Vielleicht habe ich auch was falsch gemacht. Deswegen hier mal eben der bei mir stehende Code:

Code:
$text = $row[textText];
preg_replace("/\[(.*?\=.*?\)])/Uis", "\<img src=\"images/link.gif\">\<a href=\"index.php\?\\1\"\>\<\\a>", $text);
Achja: Kleines Beispiel, zur Verdeutlichung, was ich genau will:

In der Datenbank:
Zitat:

Zitat von Lexikon
DENIC vergibt im [keyword=Internet]Internet[/keyword] die .DE-[keyword=Domains]Domains[keyword=Domains].

Im Quellcode:
Zitat:

Zitat von Lexikon-Source
DENIC vergibt im Internet die .DE-Domains.

Die ID wird folgendermaßen geholt (Funktions-Sytax):
Code:
$result = getEntryID($keyw/* Keyword */);
Chris

CalganX 17. Dez 2002 19:31

Nachdem ich mal den BB-Code-Parser durchgeparst habe ( ;) ), habe ich jetzt was passendes gefunden:

Code:
  $text = preg_replace("/\[url=(['\"]?)([^\"']*)\\1](.*)\[\/url\]/esiU", "<a href=\"index.php?site=lexikon&kid=getThreadID('\\2')\">'\\2'</a>", $text);
Problem:
Zitat:

Zitat von PHP-Parser
Parse error: parse error in c:\webserver\apache\apache\htdocs\chris-harms.de\sites\lexikon\show_entry.php(13) : regexp code on line 1

Fatal error: Failed evaluating code: 'Arbeitsspeicher' in c:\webserver\apache\apache\htdocs\chris-harms.de\sites\lexikon\show_entry.php on line 13

HELP!!!

Chris

kristoff 26. Dez 2002 17:36

hi,

schade, das das nicht geklappt hat.

hier der Code:
$str = 'RAM steht für Random Access Memory. Es wird genutzt in Verbindung mit dem [keyword=Arbeitsspeicher]Arbeitsspeicher[/keyword]. USW USW [keyword=BLah]Blah [/keyword]';
$res = preg_replace("/\[(keyword=.*?)\](.*?)\[\/keyword]/is","<a href=\"index.php?\\1\" > \\2 </a>",$str);

Result:

RAM steht für Random Access Memory. Es wird genutzt in Verbindung mit dem Arbeitsspeicher . USW USW Blah

Der Reg Ausdruck funktioniert natürlich nur, wenn das Schlagwort in die tags keyword eingefasst ist z.B.

[keyword=Arbeitsspeicher]Arbeitsspeicher[/keyword]

CalganX 27. Dez 2002 13:10

Hey! Super, danke, werde ich gleich ausprobieren.
Aber eine Frage: Ich will im Link nicht das Keyword stehen haben, sondern lieber das Ergebnis einer Funktion, dass als Parameter z.B. "Arbeitsspeicher" bekommt. Wie ist das möglich?

Chris

kristoff 28. Dez 2002 13:24

preg_replace_callback
 
hi,

du solltest dich mal mit dem php manual auseinanderstetzen.

also hier die lösung deines problems.

$str = 'RAM steht für Random Access Memory. Es wird genutzt in Verbindung mit dem [keyword=Arbeitsspeicher]Was ist der Arbeitsspeicher[/keyword]. USW USW [keyword=BLah]BlahBlah [/keyword]';
$res = preg_replace_callback ("/\[(keyword=(.*?))\](.*?)\[\/keyword]/is","ModifyMatches",$str);


function ModifyMatches($match=array()){

print_r($match);

/* tu etwas mit den treffern */

}

Result:

Array
(
[0] => [keyword=Arbeitsspeicher]Was ist der Arbeitsspeicher[/keyword]
[1] => keyword=Arbeitsspeicher
[2] => Arbeitsspeicher
[3] => Was ist der Arbeitsspeicher
)
Array
(
[0] => [keyword=BLah]BlahBlah [/keyword]
[1] => keyword=BLah
[2] => BLah
[3] => BlahBlah
)


viel spass
kristoff

CalganX 29. Dez 2002 12:12

Hi,
danke, dürfte funktionieren. Wollte ich auchmal, aber leider bin ich durch die Regular Expressions noch nicht durchgestiegen.
Mir ist da jetzt aber noch was nich ganz klar.
Habe ich das richtig verstanden, dass in der Funktion ModfiyMatches das Array $matches so ist:
Code:
$matches[2] == "Arbeitsspeicher"
usw.

Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz