私は私のプロジェクトに取り組んでいます。そこでは、人々が私のデータベースに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();
}