ブログの基本的なCMSを改善しています。今日、データベース内の(double)改行を段落タグに変換する新しい関数を追加しました。
function nl2p($str) {
$pattern = '/\n\n/';
$replacement = '</p><p>';
return preg_replace($pattern, $replacement, $str);
}
<p>
タグ内にタグを追加したくないことを除いて、これは正常に機能し<pre>
ます。<p>
そのため、関数を拡張してこれらすべてのタグを改行に再変換すると思いましたが、機能していません。理由について何かアイデアはありますか?
function nl2p($str) {
$pattern = '/\n\n/';
$replacement = '</p><p>';
$par = preg_replace($pattern, $replacement, $str);
preg_match_all('/\<pre\>(.*?)\<\/pre\>/', $par, $pre_content);
return preg_replace($replacement, $pattern, $pre_content[0]);
}
編集:これはクラックするのが難しいように思われるので、おそらくコードにコンテキストを追加する必要があります。ブログに生の形式でコードを表示するためにシンタックスハイライトを使用しています。蛍光ペンはJavascriptで記述されており、HTMLで事前にフォーマットされたタグを使用してコードを表示します。
また、上記のnl2p関数は、私のブログクラスのメソッドです。問題は、事前にフォーマットされたタグを未加工のフォーマット(つまり表示)で配置し、事前にフォーマットされたタグを使用することです。
編集2:ここにいくつかのサンプルコードがあります。最初にデータベースからの元のコード、次にフォーマットされたHTMLコード。さらに奇妙な詳細は、以下のコードの最後</p>
が実際にはソースコードに表示されないことです。終了プレタグの後にあります。
<pre name="code" class="brush: javascript">
var data = [10, 20, 30];
var svg = d3.select("body")
.append("svg")
.attr("width", 500)
.attr("height", 500);
var circle = svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("cx", function (d) { return d * 10; })
.attr("cy", 50)
.attr("r", function (d) { return d; })
.style("fill", "red");</pre>
----------
var data = [10, 20, 30];<p></p><p>var svg = d3.select("body")
.append("svg")
.attr("width", 500)
.attr("height", 500);
var circle = svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("cx", function (d) { return d * 10; })
.attr("cy", 50)
.attr("r", function (d) { return d; })
.style("fill", "red");</p>