Autor Zpráva
Michal Švarc
Profil *
Lze najít a okleštit nahrazením, za předpokladu libovolné, předem neznámé části textu?

Potřeboval bych nahradit část textu jiným, ale zachovat v části nahrazeného textu text původní (nalezený). Lze to?

Zkoušel jsem tohle (a to samo nelze):

$IPkode = str_replace('[0-9]{1,3}','<FONT CLASS=PocetText>[0-9]{1,3}</FONT>', $cisloIP);

Díky za jakoukoliv radu
roberta
Profil
ide to, len musíš presne zadefinovať, že čo vlastne chceš nahradiť čím a ešte by som ti odporučil prečítať si niečo o funkcii
str_replace
pravdepodobne tam máš poprehadzované parametre
djlj
Profil
str_replace, pokud vím, nepracuje s regulárními výrazy...
Retal
Profil
Potřebuješ regulární výrazy (preg_replace). Když budeš konkrétnější v tom, čeho chceš docílit, třeba ti někdo pomůže i s jejich sestavením.
Michal Švarc
Profil *
Dobře tedy: Mám v souboru uloženy IP adresy, a chci, aby se mi vypisovaly v čitelnější podobě, tedy tečky jinou barvou než čísla-bohužel jsem zjistil, že toto
$IPkode = str_replace('.','<FONT CLASS=PocetText>.</FONT>', $cisloIP);
sice vytvoří potřebný kód na výstupu, ale tečky barvu nemění (přesto že v třídě PocetText je nastavena jiná barva). Zato, když adresu rozložím na tečky a čísla a aplikuji změnu barvy na číslice,
funguje to. Nicméně se snažím najít způsob, kterým to tam vložit snadněji než
$IPkode = '<FONT CLASS=PocetText>'.Part1.'</FONT>.<FONT CLASS=PocetText>'.Part2.'</FONT>.<FONT CLASS=PocetText>'.Part3.'</FONT>.<FONT CLASS=PocetText>'.Part4.'</FONT>';
koudi
Profil
<font class sem teda ještě neviděl :)

Jestli ti to vytvoří kód, který chceš, ale nefunguje to, hledal bych chybu jinde...
krteczek
Profil
parametry patří do uvozovek
a napsal bych to někal takhle:

//styly zapsat do css deklarace:
.red{color:red}
.blue{color:blue}

//samotný php kod
$ip='<b class="red">'.str_replace(".",'</b><b class="blue">.</b><b class="red">'.'</b>',$ip);


krteczek
Michal Švarc
Profil *
Reakce na koudi
Jestli ti to vytvoří kód, který chceš, ale nefunguje to, hledal bych chybu jinde...

Budeš se možná divit ale s textem to funguje normálně. Akorát s tou samostatnou tečkou je trochu problém. Pokud chceš tvrdit, že je lepší DIV, není: přidává konce řádek tam kam nechci a taky se mi nechce jít do složitějších konstrukcí typu <SPAN><DIV>text</DIV></SPAN>, a proč vlastně? Když je tu FONT
Michal Švarc
Profil *
reakce na krteczek
Zkusil jsem, co navrhuješ:
$ip='<b class=\"red\">'.str_replace(".",'</b><b class=\"blue\">.</b><b class=\"red\">'.'</b>',$ip);

a zkusil sem to i s FONT a uvozovkami
$ip='<FONT class=\"red\">'.str_replace(".",'</FONT><FONT class=\"blue\">.</FONT><FONT class=\"red\">'.'</FONT>',$ip);

a ani jedno nefunguje.
krteczek
Profil
omlouvám se, byla tam chyba:

<style type="text/css">
.blue{color :blue}
.red{color:red}
</style>
<?php
$ip="88.100.128.186";
echo $ip."<br>";
$ip='<b class="red">'.str_replace(".",'</b><b class="blue">.</b><b class="red">',$ip).'</b>';
echo $ip."<br>";
?>

tento kód tak jak je je odskoušený, a plně funkční, nedávej před uvozovky zpětná lomítka, texty jsou uzavřené apostrofy tak to není třeba. krteczek
rabbit
Profil
To Michal Švarc:
Ten tag <font> se opravdu nedoporučuje používat. A to proto, že by se měl oddělovat obsah od formy. Například v dokumentu máš nadefinovaný nadpis (h1, h2 ...), odstavec, atd. V nalinkovaném css souboru pak máš nadefinováno, že nadpis h1 bude mít font arial, velikost 26px, červenou barvu atd. Když se rozmyslíš, že chceš místo Arial mít Verdanu, změníš to v tom css souboru a všechny stránky, které ten soubor includují se budou zobrazovat jinak. Ušetříš si zpoustu práce.
Konkrétně tag <font> nemá vůbec smysl používat, je to přežitek. Tag <b> je také MS hloupost, když, tak <strong>. Obojí ale definuje tučný text, což je opět forma, né smysl. Budeš se divit, ale právě tagy <div> a <span> by se měly ve spojitosti s css používat. Proč? Protože jako jediné nemají samy o sobě definovaný význam. Rozdíl v nich je ten, že <div> je blokový (!!!) element (proto se Ti tam taky vráží ten konec řádku), zatímco <span> je inline element.

Nejčistší řešení by asi vypadalo nějak takto:

<span class="ipAdresa">111<span class="tecka">.</span>222<span class="tecka">.</span> ... </span>


V css stylu bys pak měl nadefinováno:

span.ipAdresa {
/* definice stylu ip adresy */
}
span.ipAdresa span.tecka {
/* definice stylu tečky v ip adrese */
}
krteczek
Profil
OT:
rabbit: tag: <b> není ani přežitek ani hloupost má svůj semantický význam stejně jako třeba tag <menu>
rozdíl:
strong: to je zdůrazněný text
b: je tučný text
jistě netřeba vysvětlovat rozdíl mezi zdurazněným a tučným...
tagy div a span, kterými spousta stránek překypuje nemají žádný semantický význam, jen jsou to __bloky__
obsahující text (span je řádkový)... ale debata o významu těchto prvků nepatří do této kategorie(php)
krteczek
rabbit
Profil
OT:
krteczek ok, máš pravdu v tom, že <b> a <strong> není to samé (už jsem si to našel ;)

Michalovi radíš použít tag <b> ... já ale nikde nevidím požadavek na tučný text. ;-)
Michal Švarc
Profil *
Ach, Sorry. Já měl blbě css. Na tak jednoduhé chyby přijdu vždycky až na konec.
To rabbit: To se dá vyřešit absolutní adresou. Tady jsem zkusil použít styl "http://www.webzdarma.cz/webzdarma.css", a jde to bez problémů ;-). Ale i tak díky za pomoc.
krteczek
Profil
rabbit: no nechtělo se mi vypisovat <span> <b> je kratší ;-), a lépe se to potom čte (to tučné)
Toto téma je uzamčeno. Odpověď nelze zaslat.