problém s dvojitým explode a implode
17 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
dělám takovou srandu, že se všechno začínající http:// přemění na odkaz. nějak mi to ale nejde. když mám http://tarantino.wz.cz tak mi to místo <a href="http://tarantino.wz.cz" vypíše jen tarantino.wz.cz .... $p1 = explode('http://', $vypis[text]); for($i = 0; $i < count($p1); $i++) { $p2 = explode(' ', $p1[$i]); for ($ii = 0; $ii < count($p2); $ii++) { if(substr($p2[$ii], 0, 7) == "http://") { if (strlen($p2[$ii]) > 12){ $odkaz = substr($p2[$ii], 7); $p2[$ii] = ("<a href=\"http://". $odkaz ."\">http://". $odkaz ."</a>"); } } }//konec vnitřní smyčky $p1[$i] = implode(' ',$p2); }//konec první smyčky $text = implode('', $p1);
-
vim kde je chyba, ale nevim jak ji opravit, aby to bylo funkční
-
aha, ted mi to docvaklo. není lepší udělat něco jako: $text = preg_replace('/(http\:\/\/[^\s]*)/, "<a href=\"$i\">$1</a>", $vypis['text']); co?
-
Souhlas, na tohle jsou lepší regexpy než explode a implode. Přidám svůj, můžeš si vybrat :) $text = ereg_replace('([[:<:]]|[[:cntrl:]])((http://|ftp://)[[:graph:]]{1,})([[:>:]]|[[:cntrl:]])','<a href="\2">\2</a>',$text);
-
tak jsem použil to od MzM, pač je to kratší (jenom s drobnou úpravou - tvoje překlepy)... jenom sem vás chtěl poprosit o vysvětlení. manuál mi moc neřekl a moc dobře se to taky pochopit nedá.... tak dybyste byli tak hodní... $text = preg_replace('/(http\:\/\/[^\s]*)/', "<a href=\"$1\">$1</a>", $vypis['text']);
-
OK, uvod: najde kousek(ky) textu podle prvniho stringu a vymeni ho za druhy string vse ve tretim stringu. prvni string je regularni vyraz: /(http\:\/\/[^\s]*)/ reg vyraz zacina a konci znakem / mezi nimi je to, co se hleda. hledat se muzou std znaky nebo spec, znaky.., tady se konkretne hleda: http://<cosi> (/ - aby neukoncil tento znak reg vyraz, da se pred nej \ ) to <cosi> je [^\s]*, co z znamena libovolny nemezerovy znak 0 nebo Nx. pak je to cele v zavorkach (), ktere to, co v nich je, priradi do promenne $1 (druhe zavorky do $2 atd) to $1 je pak pouzite ve druhem stringu. Dale doporucuji prostudovat libovolnou stranku o regularnich vyrazech.
-
vcelku jasný... pak ještě 2 otázky: 1) proč je před : to \ ...?k čemu tam je 2) nějaký příklad kdy by byly třeba 2 kousky by nebyl?
-
1. \ - tomu se rika escape character, ma specialni vyznam, vetsinou \x, kde x je libovolny znak, vypise prave tento znak, ktery by mel jinak specialni vyznam. Pak existuje \y, kde y je jedno z mala pismene, ktere maji specialni vyznam, treba: \n - novy radek (char(13)), \t - tabulator (char(9)), \r - LF \s bily znak (mezera, CR, LF, TAB), \S nemezerovy znak \d - cislice (tusim) atd 2. moc jsem to nepochopil, ale predpokladam: $a = "Marek Prikryl"; $b = preg_replace('/(/S)* (/S)*/', "$2 $1, $a); echo $b; # vypise Prikryl Marek tohle?
-
ad 1) u tý dvojtečky chápu ale u těch písmen je to naopak, ne? /n má hodnotu nového řádku jen když je před tim zpětné lomítko.. ne? nebo to je u regulárních výrazů obráceně? ad2) přesně tak jsem to myslel. btw kdybych měl $a = "ahoj nazdar čus zdar"; $b = preg_replace('/(/S)* (/S)*/', "$2 $1, $a); echo $b; # vypise mi to "nazdar ahoj zdar čus"?
-
ne. vypíše to buďto "nazdar čus zdar ahoj" nebo "nazdar ahoj čus zdar" jiné varianty si netroufám odhadovat, no nejlepší způsob, jak to zjistit, je to zkusit ;)
-
MF: 1. mam takovy pocit, ze zrovna u dvojtecky je tam to lomitko zbytecne. ostatni znaky viz treba http://www.regularnivyrazy.info/regularni-vyrazy-zaklady.html 2. tvuj vyraz vypise "nazdar ahoj" zbytek tam nebude.
-
jj, dix. já ještě porádně pročtu regularnivyrazy.info ještě poslední minidotaz: je regulární výraz nějak spjat s funkcí? jestli by mohl např. být $b = preg_replace('ahoj', "$1", $a); ? a pak třeba napsat regulární výraz tam, kde se běžně používá string?
-
Moc nerozumím dotazu, ale předpokládám: if ( preg_match($reg_v, $string) ) { echo "ano sedi to na regv."; } else { echo "ne nesedi to na regv"; } Jestli jsem to pochopil spatne, upresni dotaz...
-
nene, myslel jsem to tak jestli můžu regulární výraz používat kdekoli. dám příklad transformování v návštěvní knize: $trans = array ( "<" => "<", ">" => ">" ); můžu tam dát např.: $trans = array ( "<" => "<", ">" => ">" "/(www.[^\s]*)/" => "<a href=\"http://$1\" target=\"_Blank\">$1</a>" ); ? tj. jestli se regulární výraz váže jenom na některé funkce...?
-
vyzkousej a uvidis ;)
-
<HTML>Popr. muzes zkusit muj... bere i IP adresy: preg_match_all("/[\s|\.|:|,](.{3,4}:\/\/){0,1}([_|-|A-Za-z0-9|]+)[.]+([_|-|A-Za-z0-9|]+)[.]+([A-Za-z]{2,4})([-_~%#&=?.a-z0-9\/]*)/m", $_TEXT, $url_array);</HTML>
-
mám tu malý problém... -> potřeboval bych převádět adresy www. a http:// na odkazy. jenže tam je ten problém. když udělám jeden preg_replace() pro http:// a www. tak nastane problém, když někdo napíše http://www. =/ napadlo mě udělat pomocí "nebo". jako pokud začíná http:// nebo www. pak z toho udělej odkaz. ale tam je taky problém, protože to neví, kdy to má do <a href=" to http:// -> aby tam nebylo http://http:// pak mě napadlo udělat to podle http:// ale aby to bralo slovo vždy s mezerou (což nevím jestli bere). -> potom až www. (v případě http:// už to totiž nebude začínat mezerou). ale jak na to? ještě jeden dotaz: může adresa obsahovat uvozovky? (kuli tomu aby mi tam někdo nedělal bordel.)