Autor Zpráva
Patrikulátor
Profil *
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
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
Alphard
Profil
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 *
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.

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: