[ _CaRtMan_ @ 08.11.2009. 14:36 ] @
Kako najbolje prepoloviti string na dva dijela? Zelim da izmedju ubacim Google Adsense reklamu pa ne znam kako bih. Ako imam clanak od 1000 znakova zelim da pola prikazem (zavrsi recenicu) pa ubaci reklamu, pa nastavi od nove recenice do kraja.

Hvala.
[ ColdKeyboard @ 08.11.2009. 14:57 ] @
http://www.php.net/manual/en/function.strpos.php
http://www.php.net/manual/en/function.strlen.php

Nisam nikad imao potrebu da to radim ali mozes recimo da izracunas duzinu stringa, prepolovis broj i onda uradis strpos da trazi '.' ali offset stavis polovinu duzine stringa.
Kad nadjes uzmes dio stringa od pocetka do dijela koji ti strpos vrati i onda ga obradjujes.
[ mitke013 @ 08.11.2009. 15:03 ] @
Koristi regular expressions. Malo su tezi da se nauce, ali vrede za sve pare.

Primer (verovatno nije ispravan jer pisem napamet):

Code:

$text = 'neki moj clanak itd itd' ; // nek recimo ima 1000 karaktera
$newText = preg_replace('/^([.*]{500,})(.*+)$/', '$1' . $adSense . '$2', $text) ;


Ovaj primer bi trebalo da brutalno ubaci oglas na tacno 500 karaktera.

Aj da probam da nadje novi pasus; nek recimo svaki pasus pre toga ima tacku:
Code:

$newText = preg_replace('/^([.*]{500,}\.)(.*+)$/', '$1' . $adSense . '$2', $text) ;


Kazem, verovatno ne radi jer su reg exp jako teski i pisem napamet, ali ovo ti neka osnova za razmisljanje
[ vatri @ 08.11.2009. 16:25 ] @
ja bi odradio explode() po "." ili " " (prazno polje) a zatim $text = $prva_polovica.$adsense.$druga_polovica.
[ mitke013 @ 08.11.2009. 16:44 ] @
Citat:
vatri: ja bi odradio explode() po "." ili " " (prazno polje) a zatim $text = $prva_polovica.$adsense.$druga_polovica.


Ako stavi prazno polje, dobice brdo reci u nizu. Kako da to spoji?
Ako stavi tacku, onda moze da prebroji recenice u nizu i tako ih spoji. Ali je to mnogo vise koda i morao bi implode ili da koristi array_splice. Mislim da je moje resenje u jednom redu najbolje.
[ Nikola Poša @ 08.11.2009. 17:57 ] @
A može i ovako:
Code:
$pozTacka = strpos($text, '.', 500);
$text = substr($text, 0, $pozTacka) . $adSense . substr($text, $pozTacka + 1);
[ mitke013 @ 08.11.2009. 20:03 ] @
Citat:
Nikola Poša: A može i ovako:
Code:
$pozTacka = strpos($text, '.', 500);
$text = substr($text, 0, $pozTacka) . $adSense . substr($text, $pozTacka + 1);



Hehe... u pravu si, najbolja resenja su ponekad najjednostavnija
[ agvozden @ 08.11.2009. 21:50 ] @
Stvar je prosta ukoliko je clanak samo tekst.
Medjutim, cesto je clanak u html formi, a ukoliko se koriste wysiwyg editori vrlo cesto ce imati <p> tagove.
U takvom slucaju ja bih tekst delio po paragrafima, dobio bih n delova, pa posle sredine ubacio reklame.

ili, ispitati broj paragrafa, pa primeniti gornje funkcije...
[ Nikola Poša @ 08.11.2009. 21:56 ] @
Naravno, al' može i to da se reši. Jedan od načina je taj koji si ti predložio, a drugi bi bio npr. zatvaranje "zaostalih" tag-ova unutar nekog string-a. Čini mi se da je Nemanja Avramović pre nekog vremena negde na PHP forumu post-ovao jednu takvu njegovu funkciju.
[ Nemanja Avramović @ 08.11.2009. 22:23 ] @
Yep, to je ova poruka: http://www.elitesecurity.org/p2414959
[ _CaRtMan_ @ 09.11.2009. 22:18 ] @
Hvala svima. Pozdrav :)