Eli pitäis saada muutettua seuraavanlainen lause sillai että myös heittomerkkien välissä oleva teksti huomioidaan.
Vaikka tämmönen "teksti" siis
niin että str_replace tms.. etsii heittomerkit ja värittää ne sekä tekstin niitten välistä.
PHP:llä voi (muistaakseni) lainausmerkin tulostaa laittamalla sen eteen kenoviivan (\). Eli:
$jono=str_replace("\"teksti\"", "<font color=\"#FFFF11\">\"teksti\"</font>", $jono);
saan kyllä lainausmerkin mutta pitäis saada se lainausmerkkine välissä oleva teksti myös väritettyä. Ko teksti on tuntematon eli se voi olla mikä vain... Eli periaatteessahan homma voisi mennä vaikka niin että se välissä oleva teksti korvataan jollakin merkillä/merkeillä joita minä nyt en satu tietämään... Mutta jos se nyt ois vaikka tähti niin näin...
$jono=str_replace("\"*\"", "<font color=\"#FFFF11\">\"*\"</font>", $jono);
Eli jos joku sattus tietään mikä se merkki mahdollisesti on tai muun keinon nii kertokaas.
makeuu kirjoitti:
$jono = str_replace("\"", "<font color=\"#FFFF11\">", $jono); $jono = str_replace("\"", "</font>", $jono);onnistuuko :O ?
No ei tietenkään :D
Ensimmäinen str_replace vaihtaa kaikki ":t <font color=\"#FFFF11\">:ksi :)
Regexpeillä voisi onnistua, joku muu kertokoon enemmän, minä en tiedä niistä paljoa.
Tässä on toimiva toteutus säännöllisellä lausekkeella:
$jono = ereg_replace("\"[^\"]*\"", "<font color=\"blue\">\\0</font>", $jono);
Ensimmäisenä oleva parametri tarkoittaa, että lainausmerkkien välissä voi olla muuttuva määrä kaikkia muita merkkejä (tai ei mitään). Toinen parametri lisää lainausmerkkikohtien ympärille värityksen - \0 on koko sääntöön sopiva tekstinpätkä.
tuollaisen koodin kekkasin jostain...
$jono = preg_replace("(\"(.*)\")", "<font color='#800080'>\"$1\"</font>",$jono);
muuten hyvä mutta värittää koko alueen, eli ottaa ensimmäisen ja viimeisen heittomerkin ja värittää kaikki niiden välistä. Ja pitäs saada niin että värittää vain "" välissä olevan alueen.
[snaps]
Tajusin hieman väärin ongelman.
Laitan tähän samaan thrediin oman kysymykseni:
Miten saa tekstistä "sensuroitua" sanan joka on monella eri kirjainkoolla. Tällä hetkellä käytän str_replacea.
esim:
poistaa: rumasana
ei poista : RuMaSaNa
EN viitsisi laittaa koko tekstiä pienille kirjaimille koska silloin se näyttää tyhmältä. Servulla ei ole php5 joten str_ireplace ei toimi.
Antin koodi nimesi vain kaikki korvattavat samalle nimelle...
tuossakin näyttäisi pientä probleemaa olevan esim tälläinen ei toimi...
$jono = 'OpenToRead("handling.lst")'; echo preg_replace("/(\")(\w*?(\"))/", "<font color=\"#800080\">$1$2</font>", $jono);
Pitäisi toimiä vähän paremmin:
$jono = 'OpenToRead("handling.lst")'; echo preg_replace("/(\")(.*?)(\")/", "$1<font color=\"#800080\">$2</font>$3", $jono);
Tämä siis ei väritä lainausmertkkejä, vaan niiden välisen osan.
Ilman ylimääräisiä viritelmiä eli helpommin ymmärrettävällä tavalla:
<?php function varita($text, $col) { $teksti = ""; $t = false; for($n = 0; $n < strlen($text); $n++) { if($text[$n] == '"') { if(!$t) $teksti .= "\"<font color=\"$col\">"; else $teksti .= '</font>'; $t = !$t; } else $teksti .= $text[$n]; } return $teksti; } echo varita('Tämä on "testi".', "#ff0000"); ?>
EDIT (jo toinen kerta): En ole syönyt tänään vielä mitään ja aivot toimivat hieman hitaasti. Oli jostakin tuntemattomasta syystä päässyt ylimääräisiä merkkejä koodiin. Oli ylimääräinen lainausmerkki ja aiemmin piste.
Crimson editor sulkee itsensä aina kun pastean tuon koodin.
EDIT: Vaikka olen includettanut tuon str-ireplace koodin niin silti valittaa: Fatal error: Call to undefined function: str_ireplace() in /home2/square35/public_html/guestbook.php on line 22
Tupla edit: Sain toimimaan. Kommentit peittivät osan koodista.
nixe kirjoitti:
Eli pitäis saada muutettua seuraavanlainen lause sillai että myös heittomerkkien välissä oleva teksti huomioidaan.
$st = preg_replace("@\"(.*?)\"@s", "<font color='#800080'>\"\\1\"</font>", $st);
Nonii alkohan sieltä toimivaa systeemiä löytyyn...
Aihe on jo aika vanha, joten et voi enää vastata siihen.