我不擅长PHP,并希望有一个PHP函数来转换它(文本块缩进四个空格):
printf("goodbye world!"); /* his suicide note
was in C */
进入这个:
<pre><code> printf("goodbye world!"); /* his suicide note
was in C */</code></pre>
保持所有其他线路完整。
这就是Markdown所做的。我找到this PHP port of Markdown(请参阅function doCodeBlocks()
),但我不想使用整个Markdown文件,我只想要这个功能。
有人能为我提供使其运行所需的最少PHP代码吗?所以我可以这样做:
<?php echo markdownPre('Here goes some code:
var x = 1, y = 2;
alert(x + y);
That should be a pre block.'); ?>
答案 0 :(得分:3)
我没试过,但我认为你可以preg_replace
正则表达式
/((?:^(?: {4}|\t).*$\n+)+)/m
<pre><code>$1</code></pre>
。
答案 1 :(得分:2)
虽然Kenny的表达有效,但我建议用回调代替灵活性:
function markdownPre($in) {
if(is_array($in)) {
$code = $in[0];
// post-process the code, e.g. remove leading spaces
$code = preg_replace('~^(\x20{4}|\t)~m', '', $code);
return "<pre>$code</pre>";
}
return preg_replace_callback('~(
^
(\x20{4} | \t)
(.+)
\n
)+~mx', __FUNCTION__, $in);
}
在“后处理”阶段,您可以做有趣的事情,例如语法高亮。
答案 2 :(得分:-1)
我不能正确理解这个问题。你想要像 -
这样的东西吗?function markdownPre($ str){ 返回'&lt;预&GT;&LT;代码&GT;”。$海峡 ''; }
这将返回
<pre><code> printf("goodbye world!"); /* his suicide note
was in C */</code></pre>
如果你通过
echo markdownPre('printf(“再见世界!”); / *他的遗书 是在C * /')
到它。