Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
10.05.2004, 18:45
scus



ich hab ein wie ich finde sehr komisches problem... aber seht selbst:
PHP-Quellcode:<?php
$result 
"[std]dies ist ein test[/std]";

$start strpos($result"[std]");
$end strpos($result"[/std]");

$str_txt substr($result$start$end);
echo 
$str_txt;
//Ausgabe: "[std]dies ist ein test" --> ok

$result "[std]dies ist ein test[/std]";

$start strpos($result"[std]");
$end strpos($result"[/std]");

$start $start 5;

$str_txt substr($result$start$end);
echo 
$str_txt;
//Ausgabe: "dies ist ein test[/std" --> hmmm

$result "[std]dies ist ein test[/std]";

$start strpos($result"[std]");
$end strpos($result"[/std]");

$start $start 2;

$str_txt substr($result$start$end);
echo 
$str_txt;
//Ausgabe: "td]dies ist ein test[/s" --> hää
?>
Woran liegt das? Ich will doch nur, dass "dies ist ein test" ausgegeben wird...

edit: natürlich hab ich schon bei php.net geguckt... (nur um nachfragen vorauszueilen)

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand


Dieser Beitrag wurde am 10.05.2004 um 19:02 von scus bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
10.05.2004, 19:01
scus



hab den fehler entdeckt: $end gibt nicht die absolute position sondern die relative position zu $start an...

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand

zum Seitenanfang zum Seitenende Profil || Suche
002
11.05.2004, 12:46
Horat



also ich würde dir empfehlen das entweder mit str_replace (hat den gleichen Effekt wie dein Gewurschtel da oben) oder mit preg_replace (is etwas komplizierter aber schneller und effektiver) zu machen.
Das was da oben steht finde ich is net so das Gelbe vom Ei!

--

Bild Blog <--

zum Seitenanfang zum Seitenende Profil || Suche
003
11.05.2004, 14:03
Chronial



Also alzu gründlich hattest du da das manual aber nicht gelesen ;)

preg_replace macht da meiner Meinung nach keinen Sinn, genauso wenig wie str_replace.

Wenn es ihm nicht zu kompliziert ist, ist dass da oben auf jeden Fall ideal, da das Schnellste.

Aber ansonsten preg_match - er will ja nichts aus dem String entfernen, sondern vielmehr etwas herausholen.

--

"tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren

zum Seitenanfang zum Seitenende Profil || Suche
004
11.05.2004, 17:41
scus



Ich habe einen String: "[std]test oder so[/std][menu]schubidu[/menu][txt]bla blub bla[/txt]"
und will folgendes: den string zwischen [std] [/std] oder [menu] [/menu] oder [txt] [/txt] herausholen, jenachdem, was für ein parameter übergeben wurde, aber das ist nebensache... (das mit dem parameter)

wie mache ich das am besten?

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand

zum Seitenanfang zum Seitenende Profil || Suche
005
11.05.2004, 18:05
CN



probier das mal
PHP-Quellcode:<?php
$str 
"dasdasd [std]dasd  876 887 678 das d6as 68das asd[/std]fcasd";

function 
get($inp$tag)
{
        
preg_replace("/\[" $tag "\](.*)\[\/" $tag "\]/Use"'$outp = "\1";'$inp);
        return 
$outp;
}

print 
get($str"std");
?>
nachteil bisher ist dass das nur den letzten treffer gibt, falls ein tag mehrmals existiert, falls das vorkommt musst du das evt in nem array speichern

.. ok hier noch mal:
PHP-Quellcode:<?php
$str 
"dasdasd [std]dasd  876 887 678 das d6as 68das asd[/std]fca[std]s[/std]d [std]dahuijeh3i2hkj hfku qzeiu12 z3inse ias[/std]dasd das d";

function 
get($inp$tag)
{
        
$outp = array();
        
preg_replace("/\[" $tag "\](.*)\[\/" $tag "\]/Use"'$outp[] = "\1";'$inp);
        return 
$outp;
}

print_r(get($str"std"));
?>
gibt aus:
Quellcode:$ php test.php
Array
(
    [0] => dasd  876 887 678 das d6as 68das asd
    [1] => s
    [2] => dahuijeh3i2hkj hfku qzeiu12 z3inse ias
)

--


Dieser Beitrag wurde am 11.05.2004 um 18:27 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
11.05.2004, 18:21
scus



bei mir gibt der code nur "1" aus...
ps es fehlt der escape \ for dem / im zweiten tag...

edit: perfekt-o-mat danke schön

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand


Dieser Beitrag wurde am 11.05.2004 um 18:28 von scus bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
11.05.2004, 18:27
CN



dann gibt er bei dir falsch aus, da fehlt nix ich hab das 1:1 so bei mir getestet und es gibt das aus was oben steht
(übrigens merke ich grad dass ich nicht i sondern s meinte bei den modifiern.. ich änders)

noch mal zum beweis:
http://cn.team-fatal.com/misc/pcre_eval.php

--


Dieser Beitrag wurde am 11.05.2004 um 18:33 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
11.05.2004, 22:51
Chronial



sag mal, CN - du bist replacesüchtig, oder?
Ich hab noch nie sowas verrücktes gesehen, wie ein replace zu nutzen, um Teile aus einem String in ein array zu laden ^^.

hier mein Vorschlag (zwar weniger kreativ, dafür sinnvoller ;)
PHP-Quellcode:<?php
function get($inp$tag)
{
        
preg_match_all("!\[$tag\](.*)\[/$tag\]!Us"$inp,$match);
        return 
$match[1];
}
?>
naja, ist wohl auch schneller (aber das machts nicht aus - ist vor allem sauberer)

dazu hab ich auch noch gleich ne Frage: Wieso benutzt du / als delimiter?
Macht es spass, die alle zu escapen oder steckt da ein tieferer Sinn dahinter?

--

"tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren

zum Seitenanfang zum Seitenende Profil || Suche
009
12.05.2004, 15:18
CN



ich hab das nur so gemacht weil ich nicht wusste dass preg_match* noch mehr params hat ..

wieso ich / verwende .. hat sich so eingebürgert, kein besondrer grund
wird auf php.net auch durchgehend benutzt
zu dem musst du ! auch escapen wenn du negative assertions machst, zb
is egal.

deins is schöner, aber wen juckts bei ner interpreter-sprache was schneller is, wenn dann is da was "weniger langsam" ;)

--


Dieser Beitrag wurde am 12.05.2004 um 15:28 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
12.05.2004, 23:28
Chronial



weniger langsam ist doch auch schonmal was :)

klar muss ich ! escapen, wenn ich negative assertions mache - aber zum einen mache ich das ja wohl fast nie und zum anderen nehme ich dann einfach einen anderen delimiter :)

--

"tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren

zum Seitenanfang zum Seitenende Profil || Suche
011
13.05.2004, 11:27
CN



stilbruch find ich nich so toll .. mach was du willst
vollkommen egal

die diskussion wird lächerlich

--

zum Seitenanfang zum Seitenende Profil || Suche
012
13.05.2004, 16:26
Chronial



mhh ja, codingstil ist ja recht schön, aber wenn ich deswegen in einem einzigen pattern 50 mal / escapen muss ist daran nichtsmehr schön :)

Aber egal
die Frage scheint ja beantwortet :)

--

"tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren

zum Seitenanfang zum Seitenende Profil || Suche
013
13.05.2004, 18:13
scus



scheint ist beantwortet...

Zitat:
scus postete
[...]
edit: perfekt-o-mat danke schön

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand

zum Seitenanfang zum Seitenende Profil || Suche