この画像は私の問題を説明しています.これはCコードであり、次のコードです.
<pre class="brush: cpp">
#include <stdio.h>
int main() {
printf("Hello world<imnew>");
return 0;
}
</pre>
ノード出力として得られるものは次のとおりです。
なぜこれが起こるのですか?どうすれば修正できますか?
この画像は私の問題を説明しています.これはCコードであり、次のコードです.
<pre class="brush: cpp">
#include <stdio.h>
int main() {
printf("Hello world<imnew>");
return 0;
}
</pre>
ノード出力として得られるものは次のとおりです。
なぜこれが起こるのですか?どうすれば修正できますか?
これは、シンタックス ハイライターの入力フィルターの後に実行される「不完全で切り捨てられた HTML を修正する」入力フィルターの問題です。「不完全で切り捨てられた HTML を修正する」入力フィルターから実行されるコードは次のとおりです。
return filter_dom_serialize(filter_dom_load($text));
以下のコードを実行してみました。
$text = <<<HTML
<pre class="brush: cpp">
#include <stdio.h>
int main() {
printf("Hello world<imnew>");
return 0;
}
</pre>
HTML;
print filter_dom_serialize(filter_dom_load($text));
私が得た出力は次のとおりです。
<pre class="brush: cpp">
#include <stdio.h>
int main() {
printf("Hello world<imnew>");
return 0;
}
</imnew></stdio.h></pre>
その理由は<stdio.h>
、 と<imnew>
がタグとして解釈され、 の前で閉じられているから</pre>
です。構文ハイライターは、このような問題を回避するために、コード内にある<
, をエスケープする必要があります。>
@guneysus の回答に加えて、すべての < を < に変更します。も働いた。