Poslao: 11 Dec 2012 09:21
|
offline
- FoxVanis
- Ugledni građanin
- Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
- Pridružio: 13 Jun 2010
- Poruke: 307
- Gde živiš: Subotica
|
Evo jedna moja mala skriptica koju koristim kada radim CMS sisteme. Ova skripta ima "moć" da ukloni nepoželjne tagove u toku kopiranja teksta preko nekih WYSIWYG editora. Opšte je poznato da ovi editori kupe i potrebne i nepotrebne HTML kodove i fajlove koji "prljaju" vaš kod i stranica ume bukvalno da se raspadne.
Druga stvar je kada imate izlistavanje teksta pa je problem uvod. E sada da uštedite pravljenje tabele u SQL-u za uvodni tekst koristite jedan skratilac koji skrati tekst sadržaja na određen broj karaktera.
GLAVNI KOD
// Čistač svih HTML tagova
function cleen_html($content, $html)
{
$content = preg_replace(
array('@<body[^>]*?>.*?</body>@siu','@<head[^>]*?>.*?</head>@siu','@<style[^>]*?>.*?</style>@siu','@<script[^>]*?>.*?</script>@siu','@<object[^>]*?>.*?</object>@siu','@<applet[^>]*?>.*?</applet>@siu','@<noframes[^>]*?>.*?</noframes>@siu','@<noscript[^>]*?>.*?</noscript>@siu','@<noembed[^>]*?>.*?</noembed>@siu','@</?((address)|(blockquote)|(center)|(del))@iu','@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu','@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu','@</?((table)|(th)|(td)|(caption))@iu','@</?((form)|(button)|(fieldset)|(legend)|(input))@iu','@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu','@</?((frameset)|(frame)|(iframe))@iu'),array(' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', "$0", "$0", "$0", "$0", "$0", "$0","$0"), $content );
$content=strip_tags($content, $html); return $content;
}
// Skratilac teksta
function strip($content, $num)
{
$content_strip = substr($content,0,$num);
if(strlen($content)>=$num){$cleen=$content_strip.'...';}
else{$cleen=$content;}
return $cleen;
}
E sada dolazi zanimljiv deo...
Kada treba da očistite sadržaj imate potpunu slobodu da zabranite sve HTML tagove ili da dozvolite da se ipak određeni pojavljuju.
$content='Ovaj tekst<div>tekst</div> je probni <br/> koji ima za <strong>cilj</strong> da prikaže <p>opciju</p> koji ovaj kod <i>pruža</i>.';
// zabranjuje sve HTML tagove
echo cleen_html($content, '');
// dozvoljava samo određene HTML elemente (<br><p><strong>)
echo cleen_html($content, '<br><p><strong>');
Drugo je skratilac ovde samo ubacite tekst i odredite broj karaktera
$content='Ovaj tekst<div>tekst</div> je probni <br/> koji ima za <strong>cilj</strong> da prikaže <p>opciju</p> koji ovaj kod <i>pruža</i>.';
// očisti tekst
$content=cleen_html($content, '');
// skrati tekst
echo strip($content, 20);
// ili optimizovana verzija
echo strip(cleen_html($content, ''), 20);
I to je to... Isprobajte i uživajte. Ako treba još neki tutorijal ili pomoć, pitajte...
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 11 Dec 2012 21:16
|
offline
- Pridružio: 16 Jan 2010
- Poruke: 241
- Gde živiš: Zemun
|
Hvala za funkciju za čišćenje teksta.
Evo jednog jednostavnog saveta za skraćivanje teksta, PHP u svojoj biblioteci ima funkciju koja se zove substr_replace (link: http://php.net/manual/en/function.substr-replace.php), koja može veoma lako da skrati tekst.
substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] );
Što u praksi izgleda ovako:
echo substr_replace("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras tincidunt aliquam magna id gravida. Nulla facilisi. Morbi suscipit sagittis enim lobortis commodo. Aenean sagittis volutpat rutrum. Duis ante neque, consectetur eget fringilla ut, suscipit eget quam. Suspendisse arcu risus, aliquam quis gravida sit amet, euismod quis libero. Ut pretium pulvinar molestie. Nam aliquet ultrices nulla in porta. Vestibulum ut purus vitae orci congue vestibulum. Etiam eget enim ac nisl malesuada ultrices nec in dolor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas..", "...", 100)
Rezultat:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras tincidunt aliquam magna id gravida. Nu...
|
|
|
|
Poslao: 13 Dec 2012 09:55
|
offline
- FoxVanis
- Ugledni građanin
- Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
- Pridružio: 13 Jun 2010
- Poruke: 307
- Gde živiš: Subotica
|
Hm... Ovo nisam koristio... Super je... Hvala!
|
|
|
|
Poslao: 13 Feb 2013 18:59
|
offline
- arnage
- Novi MyCity građanin
- Pridružio: 13 Feb 2013
- Poruke: 16
|
Evo jos jednog nacina za skracivanje teksta sa tri tacke ili bez:
function cutout($string, $howmuch, $etc = false) {
return mb_strlen($string, 'UTF-8') > $howmuch
? mb_substr($string, 0, $howmuch, 'UTF-8').($etc !== false ? '...' : '')
: $string;
}
Upotreba sa tri tacke:
$string = 'Some too long string';
$string = cutout($string, 10, true);
echo $string; //Some too l...
|
|
|
|
Poslao: 13 Feb 2013 19:27
|
offline
- Rastafarii
- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
Mnogo volem ljude koji su voljni da izmisljaju toplu vodu. PHP ima built-in funkciju koja se zove strip_tags() i cija je funkcionalnost upravo ta - da obrise nepozeljne (ili sve) html tagove.
Description ::string strip_tags ( string $str [, string $allowable_tags ] )
Ne treba napominjati da su sve built-in PHP funkcije brze od bilo koji definisanih od strane korisnika.
|
|
|
|
Poslao: 13 Feb 2013 19:35
|
offline
- arnage
- Novi MyCity građanin
- Pridružio: 13 Feb 2013
- Poruke: 16
|
Najcesce ali ne bukvalno uvek.
Na primer mana ucfirst() bult in funkcije se resava sa:
function utf8_ucfirst($string) {
return mb_strtoupper(mb_substr($string, 0, 1, 'UTF-8'), 'UTF-8').mb_strtolower(mb_substr($string, 1, mb_strlen($string, 'UTF-8') - 1, 'UTF-8'), 'UTF-8');
}
|
|
|
|
Poslao: 13 Feb 2013 21:38
|
offline
- Rastafarii
- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
@arnage: kad god postoji PHP f-ja koja radi isto to - cemu izmisljanje tople vode? Gubis na brzini, taman da je uradis 100% kako treba (a to znaci da pokrijes sve moguce varijante - sto je nemoguce).
Sa druge strane - ova tvoja implementacija ucfirst() funkcije nije ispravna. Zasto? Zasto sto tvoja varijanta vraca string sa velikim prvim slovom i ostalim malim slovima (lowercase), sto nije u skladu sa ucfirst() koja vraca prvim velikim i ostalim nepromenjenim slovima.
ucfirst ::Returns a string with the first character of str capitalized, if that character is alphabetic.
<?php
$foo = 'hello world!';
$foo = ucfirst($foo); // Hello world!
$bar = 'HELLO WORLD!';
$bar = ucfirst($bar); // HELLO WORLD!
$bar = ucfirst(strtolower($bar)); // Hello world!
?>
Neslaganje sa tvojom funkcijom @arnage je u svim sledecim karakterima od drugog na dalje. Primer:
<?php
echo ucfirst('ЋИРИЛИЦА'); // ЋИРИЛИЦА (true)
echo utf8_ucfirst('ЋИРИЛИЦА'); // Ћирилица (false)
echo ucfirst('LATINICA'); // LATINICA (true)
echo utf8_ucfirst('LATINICA'); // Latinica (false)
?>
Ispravna implementacija bi bila:
function utf8_ucfirst($string) {
return mb_strtoupper(mb_substr($string, 0, 1, 'UTF-8'), 'UTF-8'). mb_substr($string, 1, null, 'UTF-8');
}
jer tako vraca string sa pocetnim velikim slovom, i ostalim nepromenjenim.
Inace, APSOLUTNO SVE built-in PHP funkcije su brze od bilo kakve implementacije u PHP-u, pa makar implementacija bila identicna, ako ni zbog cega drugog - ono zbog vremena potrebnog da se PHP kod kompajlira prilikom pokretanja.
|
|
|
|
Poslao: 13 Feb 2013 22:02
|
offline
- arnage
- Novi MyCity građanin
- Pridružio: 13 Feb 2013
- Poruke: 16
|
Moja greska, u brzini sam pastovao pogresnu funkciju ali svodi se na isto, a ti nisi razumeo kakav je problem u pitanju.
Radi se o multibyte.
echo ucfirst('äåÖäÄ'); // äåÖäÄ
Moje (tvoje modifikovano) resenje:
echo utf8_ucfirst('äåÖäÄ'); // ÄåÖäÄå
Vidis? Ne radi se o brzini.
Ali lepo primeceno.
|
|
|
|
|
Poslao: 13 Feb 2013 22:24
|
offline
- arnage
- Novi MyCity građanin
- Pridružio: 13 Feb 2013
- Poruke: 16
|
Necemo o iskustvu. A meni si podvlacio i boldirao te reci...
Nebitno ko je sta razumeo, a sta nije, necu da mlatim praznu slamu i objasnjavam ocigledno kao ti, pa da skratim.
Rastafarii ::Ispravna implementacija bi bila:
function utf8_ucfirst($string) {
return mb_strtoupper(mb_substr($string, 0, 1, 'UTF-8'), 'UTF-8'). mb_substr($string, 1, null, 'UTF-8');
}
Ovo ne valja.
Drugarski savet: Ne siri se covece.
|
|
|
|