Autor Zpráva
SteveO
Profil *
Zdravím, tento způsob funguje:
$pattern = '#<a [^>]*\bhref=([\'"])http.?://((?<!mywebsite)[^\'"])+\1 *.*?</a>#i';
Potřeboval bych ale, aby obsah mezi <a> a </a> zůstal... poradíte prosím?
A druhá věc, počítá to i https a www variantami URL?
Díky


A druhá věc, počítá to i https a www variantami URL?“ - počítá, to jsem teď zkoušel...
Keeehi
Profil
SteveO:
No má to pár problémů. Například ten, když kolem URL nenapíšeš uvozovky. Nebo ten, že to neřeší javascriptový onclick. Nebo ten, že to neřeší javascript jako hodnotu. A taky to selže třeba na tomto vstupu pokud používáš preg_replace jak předpokládám <<a href="http://seznam.cz">xx</a>a href="http://seznam.cz">xx</a> - zahodí to ten vnitřní tag a tím zfunkční ten vnější.
Regulární výrazy jsou krátké na validování HTML. Zejména, pokud se mají starat o bezpečnost. HTML není regulárním jazykem a už tedy ze samotné podstaty nemůže být popsané regulárním výrazem. A co je ještě horší, to jsou prohlížeče. Ty se snaží vykreslit stránku za každou cenu. Takže pracují i s nevalidním HTML kódem.
SteveO
Profil *
To je sice všechno pravda, ale tohle nedělám kvůli bezpečnosti.
Potřebuji to opravdu jen upravit tak, aby z <a href="seznam.cz">xx</a> zbylo xx. Teď nezbyde nic.
Díky


Pardon, aby z <a href="http(s)://(www.)seznam.cz">xx</a> zbylo xx.
Keeehi
Profil
<?php
$data = 'jedna <a href="http://www.seznam.cz">xx</a> dva';
$pattern = '#<a [^>]*\bhref=([\'"])http.?://((?<!mywebsite)[^\'"])+\1 *.*?>(.*?)</a>#i';
echo preg_replace($pattern, '$3', $data);
SteveO
Profil *
Super, díky moc.

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: