Autor | Zpráva | ||
---|---|---|---|
SteveO Profil * |
Zdravím, tento způsob funguje:
$pattern = '#<a [^>]*\bhref=([\'"])http.?://((?<!mywebsite)[^\'"])+\1 *.*?</a>#i'; 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="h>ttp://seznam.cz">xx</a>a href="h>ttp://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 * |
#5 · Zasláno: 13. 4. 2017, 14:37:08
Super, díky moc.
|
||
Časová prodleva: 6 let
|
0