PHPで<や>を置換するときの問題点

[code]

    <pre><code>
    function a() {
      $str = ' class="name"';
      echo '<pre'.$str.'><code>'.'</code></pre>';
    }
    </code></pre>
    
[/code]

ソースコードを記述するときにHTMLには上記のように記述し、PHPで `<` や `>`
を置換していますが、`<pre><code>...</code></pre>` 内に `</code></pre>`
が含まれていた場合、そこでタグが閉じられてしまうのでうまく置換できません。  
この場合は、

[code]

    <pre><code>
    function a() {
      $str = ' class="name"';
      echo '&lt;pre'.$str.'&gt;&lt;code&gt;'.'&lt;/code&gt;&lt;/pre&gt;';
    }
    </code></pre>
    
[/code]

のように手動でやるほかないのでしょうか。




特殊文字エンティティの変換については標準関数がありますのでこちらを利用すると便利です。  
[htmlspecialchars — 特殊文字を HTML
エンティティに変換する](http://php.net/manual/ja/function.htmlspecialchars.php)

[code]

    function a() {
      $str = ' class="name"';
      echo htmlspecialchars('<pre'.$str.'><code>'.'</code></pre>');
    }
    
[/code]

