4

私は私のプロジェクトに取り組んでいます。そこでは、人々が私のデータベースにphpコードの断片を追加することができます。SyntaxHighlighterを使用してこれらのimを表示します。preg_replaceを使用して、preタグ内のすべての<角かっこをエスケープします。これは、syntaxhighlighterがコードを適切にレンダリングするために必要です。これは、phpタグなどで正常に機能します。

これは私のデータベースからの入力をレンダリングするための私のコードです:

 public function renderPre($input) // Function to escape html brackets within PRE tags. 
{
    $temp = preg_replace('/<pre>(.*?)<\/pre>/ise', "'<pre>' . htmlspecialchars('$1') . '</pre>'", $input);  
    return str_replace('<pre>', '<pre class=\'brush: php\'>', $temp);
} 

角かっこをエスケープしたら、preタグにクラスを追加して、蛍光ペンをアクティブにします。

私のデータベースでは、コードは次のように保存されています。

<pre><?php
foreach ($tutorial as $row)
{
    echo "<h1>".$row['title']."</h1>";
    echo $this->content_model->renderPre($row['intro']);
    echo $this->content_model->renderPre($row['body']);
}
?></pre>

コードがデータベースから取得されて蛍光ペンに表示される実際のページでは、次のように出力されます。

<?php
foreach ($tutorial as $row)
{
    echo \"<h1>\".$row['title'].\"</h1>\";
    echo $this->content_model->renderPre($row['intro']);
    echo $this->content_model->renderPre($row['body']);
}
?>

H1タグがある行に、いくつかの余分なスラッシュ(\)が追加されます。なぜこれが行われるのかわかりません。レンダリング関数の/iseと関係があるはずです。

誰かがこれを修正する方法について何か考えがありますか?

ありがとう!!

編集 :

データベースからものを取得するためのコード:

    public function get_tutorial()
    {
        $sql = "Select
  tutorial.*,
  category.name,
  category.slug As slug1
From
  tutorial Inner Join
  category On tutorial.category_id = category.id
  WHERE tutorial.slug = '".$this->uri->segment(3)."'
  ";

  $query = $this->db->query($sql);
  return $query->result_array();
    }
4

2 に答える 2

0

試す

public function renderPre($input) // Function to escape html brackets within PRE tags. 
{
    $input = htmlspecialchars_decode($input);
    $temp = preg_replace('/<pre>(.*?)<\/pre>/ise', "'<pre>' . htmlspecialchars('$1') . '</pre>'", $input);  
    return str_replace('<pre>', '<pre class=\'brush: php\'>', $temp);
}
于 2012-10-15T19:31:12.210 に答える
0

答えてくれてありがとう。renderpre 関数にストリップスラッシュを追加することで、正しく動作するようになりました:

 public function renderPre($input) // Function to escape html brackets within PRE tags. 
{
    $temp = preg_replace('/<pre>(.*?)<\/pre>/ise', "'<pre>' . htmlspecialchars('$1') . '</pre>'", $input);  
    return str_replace('<pre>', '<pre class=\'brush: php\'>', stripslashes($temp));
} 
于 2012-10-15T20:26:11.810 に答える