String durch URL ersetzen !?
kointa
- php
Hi all,
ich wollte grad ein Skript bissle modifizieren, jedoch scheint das skript nur für str_replace ausgelegt zu sein.
Ich kann jedenfalls das ###URL### nicht durch eine URL ersetzen.
Hier mal der Code:
// Own Player
define("OWN_WIDTH", 380);
define("OWN_HEIGHT", 313);
define("OWN_REGEXP", "/\[own ([[:print:]]+)\]/");
define("OWN_TARGET", "<embed type=\"application/x-shockwave-flash\" height=\"".OWN_HEIGHT."\" width=\"".OWN_WIDTH."\" src=\"http://www.choiz.extra.hu/mediaplayer.swf?file=###URL###&backcolor=0x000000&frontcolor=0xCCCCCC&lightcolor=0x000000&screencolor=0x000000&searchbar=false&autostart=false\" loop=\"true\" quality=\"high\" bgcolor=\"#000000\" name=\"flvplayer\" align=\"middle\" allowScriptAccess=\"sameDomain\" allowFullScreen=\"true\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" /></embed>");
function own_plugin_callback($match) {
$output = OWN_TARGET;
$output = str_replace("###URL###", $match[1], $output);
return ($output);
}
function own_plugin($content) {
return preg_replace_callback(OWN_REGEXP, 'own_plugin_callback', $content);
}
Ich habe schon versucht anstatt
str_replace("###URL###", $match[1], $output);
das hier zu nehmen:
preg_replace("###URL###", $match[1], $output);
Aber es geht trotzdem nicht.
Ich habe schon gegoogelt aber irgedwie nichts gefunden, scheint wohl etwas komplizierter zu sein. wo könnte der fehler sein ?
ich muss dazu sagen dass ich in php neu bin, aber ich lerne schnell ;)
ich möchte als ergebnis zb. haben:
[own http://fsdf.de]
Hoffe mir kann da jdn helfen.
Vielen Dank schonmal !
kointa
preg_replace("###URL###", $match[1], $output);
Aber es geht trotzdem nicht.
Kann sein preg_replace erwartet einen regulären Ausdruck als ersten Parameter. Du aber übergibst einen Stringliteral.
mfg Beat
(Hallo|Hi(ho)|Nabend) kointa,
ich wollte grad ein Skript bissle modifizieren, jedoch scheint das skript nur für str_replace ausgelegt zu sein.
Ich kann jedenfalls das ###URL### nicht durch eine URL ersetzen.
Weil dein Script nicht nach "###URL###" sucht.
// Own Player
define("OWN_WIDTH", 380);
define("OWN_HEIGHT", 313);
Der folgende Reguläre Ausdruck sucht nach '[own ...]', wobei du dir für ... alle möglichen druckbaren Zeichen (und davon mindestens eins) vorstellen musst:
define("OWN_REGEXP", "/[own ([[:print:]]+)]/");
Steht diese Kombination irgendwo in deinem zu durchsuchendem Text?
define("OWN_TARGET", "<embed type="application/x-shockwave-flash" height="".OWN_HEIGHT."" width="".OWN_WIDTH."" src="http://www.choiz.extra.hu/mediaplayer.swf?file=###URL###&backcolor=0x000000&frontcolor=0xCCCCCC&lightcolor=0x000000&screencolor=0x000000&searchbar=false&autostart=false" loop="true" quality="high" bgcolor="#000000" name="flvplayer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed>");
Bääh, was für ein Umstand, extra für preg_replace_callback() eine Ersetzen-Funktion zu basteln. Im englischen Wort "replace" steckt doch das "Ersetzen" schon drin ...
function own_plugin_callback($match) {
$output = OWN_TARGET;
$output = str_replace("###URL###", $match[1], $output);
return ($output);
}function own_plugin($content) {
return preg_replace_callback(OWN_REGEXP, 'own_plugin_callback', $content);
}
>
> Ich habe schon versucht anstatt
>
> `str_replace("###URL###", $match[1], $output);`{:.language-php}
>
> das hier zu nehmen:
>
> `preg_replace("###URL###", $match[1], $output);`{:.language-php}
>
> Aber es geht trotzdem nicht.
Ja, klar, weil preg\_replace() damit nach '##URL##' sucht, und dieses Muster wird in deinem zu durchsuchenden Text nicht enthalten sein. Das erste und das letzte '#' wird dabei übrigens als RegExp-Begrenzerzeichen interpretiert.
>
> Ich habe schon gegoogelt aber irgedwie nichts gefunden, scheint wohl etwas komplizierter zu sein. wo könnte der fehler sein ?
> ich muss dazu sagen dass ich in php neu bin, aber ich lerne schnell ;)
Das ist gut. Dann lerne schnell [preg_replace()](http://de.php.net/manual/de/function.preg-replace.php) und [PCRE in PHP](http://de.php.net/manual/en/reference.pcre.pattern.syntax.php) anzuwenden. ;-)
> ich möchte als ergebnis zb. haben:
> [own http://fsdf.de]
Das Ergebnis ist weniger interessant. Um einen passenden RegEx zu erstellen, ist es wichtiger zu wissen, wonach preg\_replace() suchen soll.
MffG
EisFuX
--
[Nichts ist dem Zuwachs an Wissen förderlicher, als nach einer Antwort korrigiert zu werden.](http://community.de.selfhtml.org/zitatesammlung/zitat119)
Weil dein Script nicht nach "###URL###" sucht.
Also alle anderen funktionen funktionieren einwandfrei, habe in meinem beispiel nur den <embed> und den namen ersetzt !?!?
hier mal der link zu dem plugin, vielleicht kannste dann erkennen wie ich meinen code verändern muss.
Skript
Steht diese Kombination irgendwo in deinem zu durchsuchendem Text?
Also das Skript funktioniert so wie es aufgebaut ist, das ist ja nciht von mir, habe nur einen "SEVENLOAD" durch "OWN" ersetzt. daran kannst also irgendwie nicht liegen !?
Bääh, was für ein Umstand, extra für preg_replace_callback() eine Ersetzen-Funktion zu basteln. Im englischen Wort "replace" steckt doch das "Ersetzen" schon drin ...
Skript ist nicht von mir :( ;)
Ja, klar, weil preg_replace() damit nach '##URL##' sucht, und dieses Muster wird in deinem zu durchsuchenden Text nicht enthalten sein. Das erste und das letzte '#' wird dabei übrigens als RegExp-Begrenzerzeichen interpretiert.
Puh :D
Das ist gut. Dann lerne schnell preg_replace() und PCRE in PHP anzuwenden. ;-)
Werds versuchen :D Danke
(Hallo|Hi(ho)|Tag) kointa,
Also alle anderen funktionen funktionieren einwandfrei, habe in meinem beispiel nur den <embed> und den namen ersetzt !?!?
Nun ja, manchmal ist es ganz gut, wenn man wenigstens grob nachvollziehen kann, was ein Script so tut, bevor man versucht, per
Copy-N-Paste was Eigenes draus zu machen. ;-)
hier mal der link zu dem plugin, vielleicht kannste dann erkennen wie ich meinen code verändern muss.
Skript
Herrjeh, sind alle Wordpress-Plugins so zusammengebastelt?
Steht diese Kombination irgendwo in deinem zu durchsuchendem Text?
Also das Skript funktioniert so wie es aufgebaut ist, das ist ja nciht von mir, habe nur einen "SEVENLOAD" durch "OWN" ersetzt.
»»daran kannst also irgendwie nicht liegen !?
Bääh, was für ein Umstand, extra für preg_replace_callback() eine Ersetzen-Funktion zu basteln.
Im englischen Wort "replace" steckt doch das "Ersetzen" schon drin ...
Skript ist nicht von mir :( ;)
Gegen eine zusätzliche Callback-Funktion für preg_replace() ist ja nichts einzuwenden, wenn die Ersetzung etwas komplexer ist,
aber den Ersetzungsstring nochmal zu durchsuchen und darin Teile zu ersetzen, erscheint mir irgendwie zu umständlich. Ich würde
das eher so lösen:
function own_plugin_callback($match) {
// dieser Wert wird benutzt, wenn keine Breite oder der Wert '0' angegeben wurde
static $default_width = '380';
// dito fuer die Hoehe
static $default_height = '313';
return '<embed type="application/x-shockwave-flash" height="' .
(empty($match[3]) ? $default_height : $match[3]) .
'" width="' .
(empty($match[2]) ? $default_width : $match[2]) .
'" src="http://www.choiz.extra.hu/mediaplayer.swf?file=' .
$match[1] .
'&backcolor=0x000000&frontcolor=0xCCCCCC&lightcolor=0x000000&screencolor=0x000000&searchbar=false&autostart=false" ' .
'loop="true" quality="high" bgcolor="#000000" name="flvplayer" align="middle" allowScriptAccess="sameDomain" ' .
'allowFullScreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed>';
// diese letzten drei Zeilen bitte zusammenfassen, ich hab die nur aufgeteilt,
// damit der Quelltext in (d|m)einem Editor
// etwas "uebersichtlicher" angezeigt wird.
// fuer das Forum hier ist er auch schon zu breit ...
}
function own_plugin($content) {
// moegliche BBCode-Muster: [own kurz-url] oder [own kurz-url breite hoehe]
// own kann groß- oder kleingeschrieben werden ("case insensitive")
return preg_replace_callback('/\[own\s+([^\]\s]+?)(?:\s+([0-9]+)\s+([0-9]+))?\]/iS', 'own_plugin_callback', $content);
}
Das ist gut. Dann lerne schnell preg_replace() und PCRE in PHP anzuwenden. ;-)
Werds versuchen :D Danke
Hier mal noch einige weitere hilfreiche Links zum Verständnis:
* empty()
* preg_replace_callback()
* Unterschiede zwischen Stringliterale in einfachen und doppelten "Hochkommas"
* Zeichenkettenoperator
* Die Handbuchseite zu den Vergleichsoperatoren beschreibt kurz den Konditional- oder Trinitäts-Operator '?:'
Wenn du dich dann noch mit der HEREDOC-Notation von Zeichenketten-Konstanten befasst hast, kannst du die Callback-Funktion auch anders schreiben:
function own_plugin_callback($match) {
$width = !empty($match[2]) ? $match[2] : '380'; // dieser Wert wird benutzt,
//wenn keine Breite oder der Wert '0' angegeben wurde
$height = !empty($match[3]) ? $match[3] : '313'; // dito fuer die Hoehe
$url = $match[1];
return <<<HTMLWUST
<embed type="application/x-shockwave-flash" height="$height" width="$width" src="http://www.choiz.extra.hu/mediaplayer.swf?file=$url&backcolor=0x000000&frontcolor=0xCCCCCC&lightcolor=0x000000&screencolor=0x000000&searchbar=false&autostart=false" loop="true" quality="high" bgcolor="#000000" name="flvplayer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed>
HTMLWUST;
}
MffG
EisFuX
Gegen eine zusätzliche Callback-Funktion für preg_replace() ist ja nichts einzuwenden, wenn die Ersetzung etwas komplexer ist,
aber den Ersetzungsstring nochmal zu durchsuchen und darin Teile zu ersetzen, erscheint mir irgendwie zu umständlich. Ich würde
das eher so lösen:
function own_plugin_callback($match) {
// dieser Wert wird benutzt, wenn keine Breite oder der Wert '0' angegeben wurde
static $default_width = '380';
// dito fuer die Hoehe
static $default_height = '313';
return '<embed type="application/x-shockwave-flash" height="' .
(empty($match[3]) ? $default_height : $match[3]) .
'" width="' .
(empty($match[2]) ? $default_width : $match[2]) .
'" src="http://www.choiz.extra.hu/mediaplayer.swf?file=' .
$match[1] .
'&backcolor=0x000000&frontcolor=0xCCCCCC&lightcolor=0x000000&screencolor=0x000000&searchbar=false&autostart=false" ' .
'loop="true" quality="high" bgcolor="#000000" name="flvplayer" align="middle" allowScriptAccess="sameDomain" ' .
'allowFullScreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed>';
// diese letzten drei Zeilen bitte zusammenfassen, ich hab die nur aufgeteilt,
// damit der Quelltext in (d|m)einem Editor
// etwas "uebersichtlicher" angezeigt wird.
// fuer das Forum hier ist er auch schon zu breit ...
}function own_plugin($content) {
// moegliche BBCode-Muster: [own kurz-url] oder [own kurz-url breite hoehe]
// own kann groß- oder kleingeschrieben werden ("case insensitive")
return preg_replace_callback('/[own\s+([^]\s]+?)(?:\s+([0-9]+)\s+([0-9]+))?]/iS', 'own_plugin_callback', $content);
}
>
>
> > > Das ist gut. Dann lerne schnell preg\_replace() und PCRE in PHP anzuwenden. ;-)
> > Werds versuchen :D Danke
>
> Hier mal noch einige weitere hilfreiche Links zum Verständnis:
> \* [empty()](http://de.php.net/manual/de/function.empty.php)
> \* [preg_replace_callback()](http://de.php.net/manual/de/function.preg-replace-callback.php)
> \* Unterschiede zwischen [Stringliterale](http://de.php.net/manual/de/language.types.string.php) in [einfachen](http://de.php.net/manual/de/language.types.string.php#language.types.string.syntax.single) und [doppelten](http://de.php.net/manual/de/language.types.string.php#language.types.string.syntax.double) "Hochkommas"
> \* [Zeichenkettenoperator](http://de.php.net/manual/de/language.operators.string.php)
> \* Die [Handbuchseite zu den Vergleichsoperatoren](http://de.php.net/manual/de/language.operators.comparison.php) beschreibt kurz den Konditional- oder Trinitäts-Operator '?:'
>
> Wenn du dich dann noch mit der [HEREDOC-Notation](http://de.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc) von Zeichenketten-Konstanten befasst hast, kannst du die Callback-Funktion auch anders schreiben:
> ~~~php
> function own_plugin_callback($match) {
> $width = !empty($match[2]) ? $match[2] : '380'; // dieser Wert wird benutzt,
> //wenn keine Breite oder der Wert '0' angegeben wurde
> $height = !empty($match[3]) ? $match[3] : '313'; // dito fuer die Hoehe
> $url = $match[1];
>
> return <<<HTMLWUST
> <embed type="application/x-shockwave-flash" height="$height" width="$width" src="http://www.choiz.extra.hu/mediaplayer.swf?file=$url&backcolor=0x000000&frontcolor=0xCCCCCC&lightcolor=0x000000&screencolor=0x000000&searchbar=false&autostart=false" loop="true" quality="high" bgcolor="#000000" name="flvplayer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed>
> HTMLWUST;
> }
MffG
EisFuX
boah cool DANKE, das ist doch mal ne super hilfe, echt big thx !!!!
werd mich gleich mal dran setzen.
function own_plugin_callback($match) {
// dieser Wert wird benutzt, wenn keine Breite oder der Wert '0' angegeben wurde
static $default_width = '380';
// dito fuer die Hoehe
static $default_height = '313';
return '<embed type="application/x-shockwave-flash" height="' .
(empty($match[3]) ? $default_height : $match[3]) .
'" width="' .
(empty($match[2]) ? $default_width : $match[2]) .
'" src="http://www.choiz.extra.hu/mediaplayer.swf?file=' .
$match[1] .
'&backcolor=0x000000&frontcolor=0xCCCCCC&lightcolor=0x000000&screencolor=0x000000&searchbar=false&autostart=false" ' .
'loop="true" quality="high" bgcolor="#000000" name="flvplayer" align="middle" allowScriptAccess="sameDomain" ' .
'allowFullScreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed>';
// diese letzten drei Zeilen bitte zusammenfassen, ich hab die nur aufgeteilt,
// damit der Quelltext in (d|m)einem Editor
// etwas "uebersichtlicher" angezeigt wird.
// fuer das Forum hier ist er auch schon zu breit ...
}function own_plugin($content) {
// moegliche BBCode-Muster: [own kurz-url] oder [own kurz-url breite hoehe]
// own kann groß- oder kleingeschrieben werden ("case insensitive")
return preg_replace_callback('/[own\s+([^]\s]+?)(?:\s+([0-9]+)\s+([0-9]+))?]/iS', 'own_plugin_callback', $content);
}
> >
Habe es eben mal versucht, aber es geht leider nicht, ich habe die zeilen zusammengefügt wie du es geschrieben hast, aber im blog kommt nur "[own URL]" als text.
[Link zur fertigen php datei](http://www.choiz.extra.hu/embed-script.rar)
Sry dass ich es nicht selbst lösen kann, habe soweit alle anführungsstriche usw. überprüft, aber die syntax selbst sollte dir vertrauter sein ;). hoffe du kannst noch einen kurzen blick drauf werfen. wär klasse.
hast was gut bei mir ^^
grüße
(Hallo|Hi(ho)|Tag|Mahlzeit) kointa,
Habe es eben mal versucht, aber es geht leider nicht, ich habe die zeilen zusammengefügt wie du es geschrieben hast, aber im blog kommt nur "[own URL]" als text.
Mhmm, bei mir hat es funktioniert -- allerdings ohne Wordpress, ich habe die Funktion nur auf einen Test-Text angesetzt.
Wie du dem Original-Plugin-Script entnehmen kannst, muss jede Plugin-Funktion noch registriert werden. Du solltest also meinem Script-Vorschlag (deswegen war's ja nur ein Vorschlag) auch noch folgende Zeilen hinzufügen:
add_filter('the_content', 'own_plugin', 1);
add_filter('the_content_rss', 'own_plugin');
add_filter('comment_text', 'own_plugin');
Sry dass ich es nicht selbst lösen kann, habe soweit alle anführungsstriche usw. überprüft, aber die syntax selbst sollte dir vertrauter sein ;).
Ein Editor mit Syntax-Highlighting kann in solchen Fällen sehr hilfreich sein.
MffG
EisFuX
Wie du dem Original-Plugin-Script entnehmen kannst, muss jede Plugin-Funktion noch registriert werden. Du solltest also meinem Script-Vorschlag (deswegen war's ja nur ein Vorschlag) auch noch folgende Zeilen hinzufügen:
add_filter('the_content', 'own_plugin', 1);
add_filter('the_content_rss', 'own_plugin');
add_filter('comment_text', 'own_plugin');
>
Super danke jetzt klappt es !!! Echt top dein support.
> > Sry dass ich es nicht selbst lösen kann, habe soweit alle anführungsstriche usw. überprüft, aber die syntax selbst sollte dir vertrauter sein ;).
> Ein [Editor](http://www.pspad.com/) mit Syntax-Highlighting kann in solchen Fällen sehr hilfreich sein.
ich hab phase 5, der gefällt mir ganz gut.
grüße