Pomoc oko str_replace-a

Pomoc oko str_replace-a

offline
  • Pridružio: 23 Sep 2008
  • Poruke: 52
  • Gde živiš: Sabac

Uh, evo vec ko zna koliko pokusavam da skuzim gde gresim, ali slabo mi ide...

Napisao sam fajl functions.php koji sadrzi jednu od sledecih funkcija:
// Menjanje cirilica i latinica // Posle izbrisi ista slova function cirlat($msg) { $msg = str_replace("a","а",$msg); $msg = str_replace("A","А",$msg); $msg = str_replace("b","б",$msg); $msg = str_replace("B","Б",$msg); $msg = str_replace("v","в",$msg); $msg = str_replace("V","В",$msg); $msg = str_replace("g","г",$msg); $msg = str_replace("G","Г",$msg); $msg = str_replace("D","Д",$msg); $msg = str_replace("d","д",$msg); $msg = str_replace("đ","ђ",$msg); $msg = str_replace("Đ","Ђ",$msg); $msg = str_replace("e","е",$msg); $msg = str_replace("E","Е",$msg); $msg = str_replace("ž","ж",$msg); $msg = str_replace("Ž","Ж",$msg); $msg = str_replace("z","з",$msg); $msg = str_replace("Z","З",$msg); $msg = str_replace("i","и",$msg); $msg = str_replace("I","И",$msg); $msg = str_replace("j","ј",$msg); $msg = str_replace("J","Ј",$msg); $msg = str_replace("k","к",$msg); $msg = str_replace("K","К",$msg); $msg = str_replace("l","л",$msg); $msg = str_replace("L","Л",$msg); $msg = str_replace("lj","љ",$msg); $msg = str_replace("Lj","Љ",$msg); $msg = str_replace("m","м",$msg); $msg = str_replace("M","М",$msg); $msg = str_replace("n","н",$msg); $msg = str_replace("N","Н",$msg); $msg = str_replace("nj","њ",$msg); $msg = str_replace("Nj","Њ",$msg); $msg = str_replace("o","о",$msg); $msg = str_replace("O","О",$msg); $msg = str_replace("P","П",$msg); $msg = str_replace("p","п",$msg); $msg = str_replace("R","Р",$msg); $msg = str_replace("r","р",$msg); $msg = str_replace("S","С",$msg); $msg = str_replace("s","с",$msg); $msg = str_replace("T","Т",$msg); $msg = str_replace("t","т",$msg); $msg = str_replace("ć","ћ",$msg); $msg = str_replace("Ć","Ћ",$msg); $msg = str_replace("U","У",$msg); $msg = str_replace("u","у",$msg); $msg = str_replace("F","ф",$msg); $msg = str_replace("f","Ф",$msg); $msg = str_replace("H","Х",$msg); $msg = str_replace("h","х",$msg); $msg = str_replace("c","ц",$msg); $msg = str_replace("C","Ц",$msg); $msg = str_replace("č","ч",$msg); $msg = str_replace("Č","Ч",$msg); $msg = str_replace("dz","џ",$msg); $msg = str_replace("Dz","Џ",$msg); $msg = str_replace("Š","Ш",$msg); $msg = str_replace("š","ш",$msg); return $msg; }

na svaku stranu postavljam u head
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> zbog prepoznavanja svih znakova

i sad imam fajl npr istorija.php

izgleda ovako:
<?php print"<head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head>"; include"../functions.php";    connect_db();    cirlat($msg);        $upit = mysql_query("select * from istorijat where `id`='1'");    while($data = mysql_fetch_array($upit)) {       print "$data[tekst]";       }    ?>

I sad mi nije jasno zasto nece da zameni ova latinicna slova cirilicom?
Zna li ko? Posto ja nikada nisam radio sa str_replace i ereg_replace f-jama...



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Probaj na pocetak funkcije da stavis sledece:
$msg = htmlentities($msg, ENT_COMPAT, "UTF-8");
a na kraj ovo:
return html_entity_decode($msg);umesto tvog return $msg;



offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

hm a sta pokusavas da uradis, gdje si prethodno definisao promjenljivu $msg?

I ako bi je htio da ispises trebalo bi stajati

print cirlat($msg);


ali posto vidim da nesto citas iz baze sto bi vjerovatno htio da prevedes, mislim da bi ti trebalo pisati

print cirlat($data['tekst']);

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • Gde živiš: 127.0.0.1

Jok bobby, nije to... Sam kod koji je dao radi, ali nije lepo povezan Wink Da pojasnim:

connect_db();    cirlat($msg);

Konektuje se na bazu, pozove f-ju cirlat bez ulaznog parametra ($msg promenljiva nigde nije definisana), i, sto je jos bitnije, rezultat (nicega) ne smesta nigde, tj ne dodeljuje se nijednoj promenljivoj Wink

   $upit = mysql_query("select * from istorijat where `id`='1'");    while($data = mysql_fetch_array($upit)) {       print "$data[tekst]";       }

A zatim izvlaci nesto iz baze, i stampa ga u izvornom, neizmenjenom obliku - jer f-ja cirlat ga nije ni "pipnula".

Kod koji bi zavrsavao* posao je ovakav, otprilike:

<html> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> </head> <body> <?php include"../functions.php";    connect_db();      $upit = mysql_query("select * from istorijat where `id`='1'");    while($data = mysql_fetch_array($upit)) {       print cirlat($data[tekst]);       }    ?> </body> </html>

S' tim sto bih ja f-ju cirlat definisao ovako:

function cirlat($string) {       $cir = array("Љ","Њ","Е","Р","Т","З","У","И","О","П","Ш","Ђ","Ж","А","С","Д","Ф","Г","Х","Ј","К","Л","Ч","Ћ","Џ","Ц","В","Б","Н","М", "љ","њ","е","р","т","з","у","и","о","п","ш","ђ","ж","а","с","д","ф","г","х","ј","к","л","ч","ћ","џ","ц","в","б","н","м");       $lat = array("Lj","Nj","E","R","T","Z","U","I","O","P","Š","Đ","Ž","A","S","D","F","G","H","J","K","L","Č","Ć","Dž","C","V","B","N","M", "lj","nj","e","r","t","z","u","i","o","p","š","đ","ž","a","s","d","f","g","h","j","k","l","č","ć","dž","c","v","b","n","m");       $string = str_replace($lat,$cir,$string);       return $string;    }

*Napomena: transliteracija latinica -> cirilica nije uvek pouzdana (zbog reci kao sto su injekcija - инјекција, koja bi postala ињекција), pa se preporucuje da se original drzi u cirlicnom pismu, a po potrebi radi transliteracija u latinicu, jer je takav smer mnogo pouzdaniji.

EDIT: dok sam ja napisao (kilometarski) post, pretece me igor86 Wink

offline
  • Pridružio: 23 Sep 2008
  • Poruke: 52
  • Gde živiš: Sabac

Hvala puno, ja sam totalno prevideo da nisam ubacio print cirlat($data[tekst]); , jer sam mislio da je greska negde u str_replace, i ako mi je bilo cudno jer nije pokazivao ni jednu gresku ...

Na kraju sam iskoristio ovo sa nizovima, preglednije a i functions.php mi se smanjo za par kb Razz (smanjio, posto sam ovako odradio i cenzurisane reci)

I jos jedno pitanje, ali za njega nemam ideju, sem ako php opet nema neku funkciju tipa trim.

Npr, evo iz istog ovog ispisivanja iz baze, npr. ispisuje 1000 karaktera (long text), postoji li funkcija kojom bih na primer odsekao prvih 150 karaktera?

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • Gde živiš: 127.0.0.1

Yep, funkcija se zove substr() Wink

Mada ja licno koristim malo modifikovanu funkciju sub_str():

function sub_str($string,$s,$e) { //$string - (string) ulazni tekst //$s - (integer) pocetak zeljenog dela //$e - (integer) duzina zeljenog dela //Primer #1: echo sub_str("ovo je test string koji treba skratiti",0,18); //Vraca: "ovo je test string..." //Primer #2: echo echo sub_str("ovo je test string koju treba skratiti",0,25); //Vraca: "ovo je test string koji treba..." //Primer #3: echo sub_str("ovo je test string koji treba skratiti",7,7); //Vraca: "test string..."       $cnt = strlen($string);       if ($s != 0) {          $string = substr($string,$s,$cnt - $s);          $cnt = strlen($string);          $s = 0;          $e = $e - $s;       }       $cut = substr($string,$e,$cnt-$e);       $string = substr($string,0,$e-$s);       if ($cut[0] != " ") {          for($i=0;$i<=strlen($cut);$i++) {             if ($cut[$i] != " ") {                $string .= $cut[$i];             }             else {                break;             }          }       }       if ($e < $cnt) {          $string .= "...";       }       return $string;    }
Sa kojom ne moze bas da se sredjuje HTML formatirani tekst (kao sto ne moze ni sa substr), ali bar ne "sece" string na kraju limita, vec taj limit "produzi" za par karaktera (ukoliko je potrebno) da bi se prikazala cela rec, i dodaje "..." na kraj ako nije prikazan ceo string.

PHP funkcija trim(), sa druge strane, sluzi da sa pocetka i kraja stringa "skine" (nepotrebne) blanko karaktere. Koristi se i za neke druge stvari, ali joj je ova upotreba najcesca.

offline
  • Pridružio: 23 Sep 2008
  • Poruke: 52
  • Gde živiš: Sabac

E brate mnogo hvala. Taman bi se patio sa ovim pa jos jedno najmanje pola dana, a pitanje dal bi je i pronasao na php.net/manuals

Resio sam ovo sto sam hteo sa ovim kodom <?php          $upit = mysql_query("select * from istorijat where `id`='1'");                      while($data = mysql_fetch_array($upit)) {             echo cirlat(sub_str("$data[tekst]",0,1250));                                  }                         ?>

Mozda ce jos nekom da koristi...

Ko je trenutno na forumu
 

Ukupno su 822 korisnika na forumu :: 12 registrovanih, 1 sakriven i 809 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, A.R.Chafee.Jr., Dorcolac, Draganeli, drimer, kolle.the.kid, Koridor, Lazarus, ozzy, strelac07, suton, yrraf