Autor Zpráva
MikeCZ
Profil
Zdravím, mám kód:

<a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMRGSDvS8I/AAAAAAAACEM/tYBTki5EsRI/s1600-h/1.jpg"></a><a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMfqplCZdI/AAAAAAAACEU/TYl2h8cT7kk/s1600-h/fed07_2_1061.jpg"></a><a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMfqxrxPdI/AAAAAAAACEc/Dx-HtMXyQnw/s1600-h/43543453435435.jpg"></a><br /><a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMRGP95yhI/AAAAAAAACEE/7xzHHTdOJxw/s1600-h/2.jpg"></a><br /><a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMRFx5SdAI/AAAAAAAACD8/k0EFosn5FLk/s1600-h/3.jpg"></a><br /><a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMRFrn76fI/AAAAAAAACD0/OLgnMmp7Gkc/s1600-h/4.jpg"></a><br /><a href="http://4.bp.blogspot.com/_Yc1xzP5LsyU/SyMRFcsNMVI/AAAAAAAACDs/4djGKkdoYI0/s1600-h/5.jpg"></a><br /><a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMQFxAV-3I/AAAAAAAACDk/WhiL_WVUpzI/s1600-h/6.jpg"></a><br /><a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMQFuz-aJI/AAAAAAAACDc/PAxWQY86wWI/s1600-h/7.jpg"></a><br /><a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMQFQWQnpI/AAAAAAAACDU/BDjspY7CHjc/s1600-h/8.jpg"></a><br /><a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMQFCyh8-I/AAAAAAAACDM/ZlWb9nFtCbg/s1600-h/9.jpg"></a><br /><a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMQE0LhUyI/AAAAAAAACDE/QBDC0oYQ8iY/s1600-h/10.jpg"></a><br /><a href="http://1.bp.blogspot.com/_Yc1xzP5LsyU/SyMOuxlIIlI/AAAAAAAACC8/-4jVbI3Wt8A/s1600-h/11.jpg"></a><br /><a href="http://1.bp.blogspot.com/_Yc1xzP5LsyU/SyMOuldplDI/AAAAAAAACC0/bIUd1eLaOH4/s1600-h/12.jpg"></a><br /><a href="http://4.bp.blogspot.com/_Yc1xzP5LsyU/SyMOub_9fyI/AAAAAAAACCs/zv79mwnodFw/s1600-h/13.jpg"></a><br /><a href="http://4.bp.blogspot.com/_Yc1xzP5LsyU/SyMOuPRWAOI/AAAAAAAACCk/KagrhJntU3k/s1600-h/14.jpg"></a><br /><a href="http://1.bp.blogspot.com/_Yc1xzP5LsyU/SyMN78wcNWI/AAAAAAAACCU/FG7XTtEt_Kg/s1600-h/15.jpg"></a><br /><a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMN7U68-uI/AAAAAAAACCM/-ePebfUlRaQ/s1600-h/16.jpg"></a><br /><a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMN7C_cd5I/AAAAAAAACCE/n5PvHuhk6DE/s1600-h/17.jpg"></a><br /><a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMN7M7sYjI/AAAAAAAACB8/mvMRl2-gP4M/s1600-h/18.jpg"></a><br /><a href="http://1.bp.blogspot.com/_Yc1xzP5LsyU/SyMN6uYdPeI/AAAAAAAACB0/5aXk-cMgf10/s1600-h/19.jpg"></a><br /><a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMNH2fRq8I/AAAAAAAACBs/_Wei1GQRQj4/s1600-h/20.JPG"></a><br />


Potřebuju nějakým způsobem zjišťovat, jestli se tam nacházejí prázdné tagy <a....></a> a všechny je odstranit, tím pádem bych měl dostat v řetězci už jen <br /> (či <br>) a pokud jich bude více jak 2 za sebou, např. 10, tak je chci vždy zaměnit za 2 :).

Tedy z kódu, který je výše by mělo zbýt jen "<br /><br />" :). A pokud možno aby to fungovalo i pro <br>. Hádám, že bude zapotřebí regulerních výrazů.

BTW v kódu se budou nacházet jen <br><br /> a <a...></a> tagy a nemusí být jen takto v řádku, můžou mezi nimi být i odřádkování apod.

Díky za každou radu :).

Moderátor Majkl578: Mírně jsem upravil nedokončený nadpis tématu
Majkl578
Profil
Chvíli jsem nad tím přemýšlel a snad jsem to pochopil správně, zkus použít toto:
$text = preg_replace('~\<a.*\>\s*\</a\>~iUs', '', $text);
$text = preg_replace('~\s*(?:\<br(?: /)?\>){2,}\s*~is', '\1\1', $text);

var_dump($text);

Mimojiné, jedná se o regulární výrazy.
MikeCZ
Profil
Díky, ty odkazy fungujou. Ale to druhý už ne.

string(14) "FD'sPhoto by :"
a základ vypadal takhle:

FD's<br /><a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMRGSDvS8I/AAAAAAAACEM/tYBTki5EsRI/s1600-h/1.jpg"></a>
<a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMfqplCZdI/AAAAAAAACEU/TYl2h8cT7kk/s1600-h/fed07_2_1061.jpg"></a>
<a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMfqxrxPdI/AAAAAAAACEc/Dx-HtMXyQnw/s1600-h/43543453435435.jpg"></a>
<br /><a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMRGP95yhI/AAAAAAAACEE/7xzHHTdOJxw/s1600-h/2.jpg"></a><br />
<a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMRFx5SdAI/AAAAAAAACD8/k0EFosn5FLk/s1600-h/3.jpg"></a><br />
<a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMRFrn76fI/AAAAAAAACD0/OLgnMmp7Gkc/s1600-h/4.jpg"></a><br />
<a href="http://4.bp.blogspot.com/_Yc1xzP5LsyU/SyMRFcsNMVI/AAAAAAAACDs/4djGKkdoYI0/s1600-h/5.jpg"></a><br />
<a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMQFxAV-3I/AAAAAAAACDk/WhiL_WVUpzI/s1600-h/6.jpg"></a><br />
<a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMQFuz-aJI/AAAAAAAACDc/PAxWQY86wWI/s1600-h/7.jpg"></a><br />
<a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMQFQWQnpI/AAAAAAAACDU/BDjspY7CHjc/s1600-h/8.jpg"></a><br />
<a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMQFCyh8-I/AAAAAAAACDM/ZlWb9nFtCbg/s1600-h/9.jpg"></a><br />
<a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMQE0LhUyI/AAAAAAAACDE/QBDC0oYQ8iY/s1600-h/10.jpg"></a><br />
<a href="http://1.bp.blogspot.com/_Yc1xzP5LsyU/SyMOuxlIIlI/AAAAAAAACC8/-4jVbI3Wt8A/s1600-h/11.jpg"></a><br />
<a href="http://1.bp.blogspot.com/_Yc1xzP5LsyU/SyMOuldplDI/AAAAAAAACC0/bIUd1eLaOH4/s1600-h/12.jpg"></a><br />
<a href="http://4.bp.blogspot.com/_Yc1xzP5LsyU/SyMOub_9fyI/AAAAAAAACCs/zv79mwnodFw/s1600-h/13.jpg"></a><br />
<a href="http://4.bp.blogspot.com/_Yc1xzP5LsyU/SyMOuPRWAOI/AAAAAAAACCk/KagrhJntU3k/s1600-h/14.jpg"></a><br />
<a href="http://1.bp.blogspot.com/_Yc1xzP5LsyU/SyMN78wcNWI/AAAAAAAACCU/FG7XTtEt_Kg/s1600-h/15.jpg"></a><br />
<a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMN7U68-uI/AAAAAAAACCM/-ePebfUlRaQ/s1600-h/16.jpg"></a><br />
<a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMN7C_cd5I/AAAAAAAACCE/n5PvHuhk6DE/s1600-h/17.jpg"></a><br />
<a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMN7M7sYjI/AAAAAAAACB8/mvMRl2-gP4M/s1600-h/18.jpg"></a><br />
<a href="http://1.bp.blogspot.com/_Yc1xzP5LsyU/SyMN6uYdPeI/AAAAAAAACB0/5aXk-cMgf10/s1600-h/19.jpg"></a><br />
<a href="http://2.bp.blogspot.com/_Yc1xzP5LsyU/SyMNH2fRq8I/AAAAAAAACBs/_Wei1GQRQj4/s1600-h/20.JPG"></a>
<br />Photo by : <a href="http://www.flickr.com/photos/tweakculture/sets/72157621357938914/">TweakCulture</a><br />
<a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMNHoG_i3I/AAAAAAAACBk/S__4BAzTg9E/s1600-h/21.jpg"></a><br />
<a href="http://4.bp.blogspot.com/_Yc1xzP5LsyU/SyMNHv8YniI/AAAAAAAACBc/P2KlYZWprNI/s1600-h/22.jpg"></a><br />
<a href="http://4.bp.blogspot.com/_Yc1xzP5LsyU/SyMNHFf2CSI/AAAAAAAACBU/2T04faUkTuY/s1600-h/23.jpg"></a><br />
<a href="http://3.bp.blogspot.com/_Yc1xzP5LsyU/SyMNG032tdI/AAAAAAAACBM/82jly31qIBI/s1600-h/24.jpg"></a>


(trochu jsem to nařádkoval, aby se to líp četlo)

Když jsme odstranili <a></a>, tak tam zbylo hodně <br /> tagů, ale já je chci jen nahradit za <br /><br /> ať už jich tam je libovolnej počet více jak 2... A bude to fungovat i pro <br>? Tohle "(?: /)" by to asi v tom regulárním výrazu mělo zajišťovat, že?

Ve výsledku jsem to tedy chtěl nějak takhle:

string(14) "FD's<br /><br />Photo by : <a href="http://www.flickr.com/photos/tweakculture/sets/72157621357938914/">TweakCulture</a>"
Majkl578
Profil
Je mi to jasné.
Zkus toto:
$text = preg_replace('~\<a[^\>]*\>\s*\</a\>~iUs', '', $text);
$text = preg_replace('~(?:\s*(\<br(?: /)?\>)\s*){2,}~is', '\1\1', $text);
var_dump($text);

V tom předchozím jsem udělal (tuším) dvě chybky.
MikeCZ
Profil
Díky, vypadá to, že to funguje. Mimochodem všechno na co jsem se tady v posledních dnech ptal... je to RSS čtečka, ale chci tam ty posty i uchovat a zároveň nechci aby uživatel při každym vstupu ověřoval 30 zdrojů, což by trvalo dost dlouho, takže to spouštim cronem a ukládam do db. Jenže lidi si dělaj co chtěj nebo maj špatný výstupy a někdy to chce ty obsahy dost upravit :).
MikeCZ
Profil
Myslíš, že by šly ještě následující podmínky?

Když se za <br /><br /> (či <br><br>) nenachází již žádný text, tak se všechna <br /> či <br> smažou?
Např. v případě: "text<br /><br />" (nebo <br><br>)

To samé pak když se tagy pro odřádkování nacházejí před textem.

"text<br /><br />" => "text"
"<br /><br />text" => "text"
"text<br><br>" => "text"
"<br><br>text" => "text"

A vlastně pak se také může stát, že zbyde jen jediný tag, takže ještě:

"text<br />" => "text"
"<br />text" => "text"
"text<br>" => "text"
"<br>text" => "text"

Pokud v textu zbydou už jen samotné tagy, tak si je už ohlídám pomocí podmínek.
Majkl578
Profil
To by mohlo jít takto:

$text = array(
	'text<br /><br />',
	'<br /><br />text',
	'text<br><br>',
	'<br><br>text',
	'text<br />',
	'<br />text',
	'text<br>',
	'<br>text',
);
$text = preg_replace('~(?:^(?:\<br(?: /)?\>)*|(?:(?:\<br(?: /)?\>)*$))~is', '', $text);
var_dump($text);


Takže celé takto použité:
$text = preg_replace('~\<a[^\>]*\>\s*\</a\>~iUs', '', $text);
$text = preg_replace('~(?:\s*(\<br(?: /)?\>)\s*){2,}~is', '\1\1', $text);
$text = preg_replace('~(?:^(?:\<br(?: /)?\>)*|(?:(?:\<br(?: /)?\>)*$))~is', '', $text);
var_dump($text);
MikeCZ
Profil
Díky :). Vypadá to, že to funguje i když tam zůstanou jen samotné tagy... je to tak? Chci se jen ujistit.
Majkl578
Profil
Ano. Ten poslední regulár ještě uprav takto:
$text = preg_replace('~(?:^(?:\s*\<br(?: /)?\>\s*)*|(?:(?:\s*\<br(?: /)?\>\s*)*$))~is', '', $text);

Aby tam na konci nezůstala např. samotná mezera jako výsledný řetězec.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0