| Autor | Zpráva | ||
|---|---|---|---|
| Patrikulátor Profil * |
#1 · Zasláno: 4. 3. 2016, 08:05:57
Mám v proměnné nějaký text včetně HTML tagů a potřebuji pro své účely proměňovat všechny výskyty " a ' na entity s podmínkou, aby se změna nedotkla žádných tagů < ... > tam ať ty uvozovky a apostrofy zůstanou jak jsou.... Neumím setavit regulár pro preg_replace , ...... htmlspecialchars () mi tady nepomůže :( Díky za tipy
|
||
| RastyAmateur Profil |
Patrikulátor:
Pokud to dobře chápu, tak ti jednoduše řečeno jde o to, abys přepsal " a ' na entity. Nestačilo by str_replace()? Počkej, už to chápu. Mimo HTML tagy přeměnit, jindy ne? |
||
| Keeehi Profil |
#3 · Zasláno: 4. 3. 2016, 09:59:39
Patrikulátor:
Problém je, že HTML není regulární jazyk a není tedy možné napsat takový regulární výraz, který by pokryl všechny možnosti. Potřebuješ na to něco silnějšího. github.com/nette/tokenizer nebo php.net/manual/en/book.simplexml.php nebo php.net/manual/en/book.dom.php |
||
|
Časová prodleva: 3 dny
|
|||
| Alphard Profil |
#4 · Zasláno: 7. 3. 2016, 12:03:08
Tokenizer je určitě dobrá volba, zajistí validaci a robustnost, bohužel je implementačně náročnější.
Pro docela jednoduchou věc, jako nahrazení textu mimo <tagy>, by mohl stačit i triviální parser jako např. tento náčrt. Záleží na situaci, k čemu se to použije.
function replaceNonHtml($input, callable $replaceFcn) {
$endPos = strlen($input);
$currPos = 0;
$output = '';
while (($startTagPos = strpos($input, '<', $currPos)) !== false) {
$endTagPos = strpos($input, '>', $startTagPos) ?: $endPos;
$output .= $replaceFcn(substr($input, $currPos, $startTagPos-$currPos));
$output .= substr($input, $startTagPos, $endTagPos-$startTagPos);
$currPos = $endTagPos;
}
$output .= $replaceFcn(substr($input, $currPos, $endPos-$currPos));
return $output;
} |
||
| Martin2 Profil * |
#5 · Zasláno: 8. 3. 2016, 12:16:16
Patrikulátor:
„potřebuji pro své účely proměňovat všechny výskyty " a ' na entity“ Existuje k tomu nějaký důvod? S výjimkou snad escapování ostrých závorek v HTML jsou entity něco, co není důvod používat. |
||
|
Časová prodleva: 10 let
|
|||
0