Zmiana znaków wewnątrz tagu pre [zamknięte]

Witam, Mam następujący problem. Chciałbym zamienić wszystkie nawiasy ostre < i > na znaki ucieczkowe. Żeby było trudniej, chodzi mi tylko o znaki znajdujące się wewnątrz następującego wyrażenia:

<pre class="brush: js">tutaj jakiś kod źródłowy który zawierać będzie ostre nawiasy, które muszą zostać zmienione na ich znaki ucieczkowe</pre>

Tak więc prawdopodobnie musiałbym znaleźć wewnątrz tekstu wszystkie łańcuchy zaczynające się od pre i kończące się na pre i dokonać wewnątrz nich zamiany. W jaki sposób można tego dokonać za pomocą PHP?
Zawartość atrybutu class dla pre, może być zmienna.

Powód zamknięcia: Udzielono odpowiedzi na pytanie, poprawna odpowiedź została zaakceptowana

  • Możesz to zrobić tak jak halish ci polecił czyli złap wszystko co wew. tagu otwierającego
    < pre> a tagiem zamykającym < /pre> a później już tylko via str_replace zamieniasz znaki < i > na &lt i &gt
    "Wnętrze" możesz złapać via regexp np
    <pre[^>]*>(.*?)<\/pre> (chyba jest ok :) i to będzie twój $tekst

  • Jeżeli strona jest prawidłowym dokumentem XHTML, przy pomocy SimpleXML razem z XPathem wygrzebać wszystkie znaczniki pre, a następnie zwykłym str_replace:

    foreach ($xml->xpath('pre[@style=brush:js') as $tekst) {
        $tekst = str_replace({'<', '>'}, {'&lt;', '&gt;'}, $tekst};
    }
    

    Nie jestem pewien, czy to zadziała, ale najłatwiej zrobić to w ten sposób.

  • Generalnie problem rozwiązałem w oparciu o powyższe wpisy w sposób następujący (może komuś się przyda):

    echo preg_replace_callback('#\<pre[^>]*\>(.+?)\<\/pre\>#s', 'ReplaceCharactersInsidePre', $sVariable);
    
    function ReplaceCharactersInsidePre($asMatches)
    {
        $nPos = strpos($asMatches[0], '>');
        if($nPos > 0)
        {
            return(substr($asMatches[0], 0, $nPos + 1).htmlentities($asMatches[1]).'</pre>');
        }
        else 
        {
            return($asMatches[0]);
        }
    }
    

Zaloguj się, aby dodać swoją odpowiedź