highlight_string

(PHP 4, PHP 5, PHP 7, PHP 8)

highlight_string对字符串进行语法高亮

描述

highlight_string(string $string, bool $return = false): string|bool

使用 PHP 内置语法高亮器中定义的颜色,输出或返回给定 PHP 代码的语法高亮 HTML 标记。

参数

string

要高亮的 PHP 代码。这应该包括开始标记。

return

将此参数设置为 true 使此函数返回高亮代码。

返回值

如果 return 设置为 true,则返回高亮代码作为字符串,而不是将其打印出来。否则,它将在成功时返回 true,在失败时返回 false

变更日志

版本 描述
8.3.0 生成的 HTML 已更改。

示例

示例 #1 highlight_string() 示例

<?php
highlight_string
('<?php phpinfo(); ?>');
?>

上面的示例将输出

<code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php phpinfo</span><span style="color: #007700">(); </span><span style="color: #0000BB">?&gt;</span>
</span>
</code>

PHP 8.3 中上述示例的输出

<pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php phpinfo</span><span style="color: #007700">(); </span><span style="color: #0000BB">?&gt;</span></code></pre>

注释

注意:

当使用 return 参数时,此函数使用内部输出缓冲,因此不能在 ob_start() 回调函数中使用。

生成的 HTML 标记可能会发生变化。

参见

添加注释

用户贡献注释 29 notes

stanislav dot eckert at vizson dot de
8 年前
您可以更改高亮的顏色,例如:

<?php
ini_set
("highlight.comment", "#008000");
ini_set("highlight.default", "#000000");
ini_set("highlight.html", "#808080");
ini_set("highlight.keyword", "#0000BB; font-weight: bold");
ini_set("highlight.string", "#DD0000");
?>

如您在上面的示例中所见,您甚至可以添加额外的样式,例如粗体文本,因为值直接设置为 DOM 属性“style”。

此外,此函数仅高亮文本,如果它以前缀“<?php”开头。但此函数也可以高亮其他类似的格式(不完全,但比没有好),比如 HTML、XML、C++、JavaScript 等。我使用以下函数来高亮不同的文件类型,效果还不错

<?php
function highlightText($text)
{
$text = trim($text);
$text = highlight_string("<?php " . $text, true); // highlight_string() 需要开始 PHP 标记,否则它将不会对文本进行着色
$text = trim($text);
$text = preg_replace("|^\\<code\\>\\<span style\\=\"color\\: #[a-fA-F0-9]{0,6}\"\\>|", "", $text, 1); // 删除前缀
$text = preg_replace("|\\</code\\>\$|", "", $text, 1); // 删除后缀 1
$text = trim($text); // 删除换行符
$text = preg_replace("|\\</span\\>\$|", "", $text, 1); // 删除后缀 2
$text = trim($text); // 删除换行符
$text = preg_replace("|^(\\<span style\\=\"color\\: #[a-fA-F0-9]{0,6}\"\\>)(&lt;\\?php&nbsp;)(.*?)(\\</span\\>)|", "\$1\$3\$4", $text); // 删除自定义添加的 "<?php "

return $text;
}
?>

注意,它也会删除 <code> 标记,这样您就可以直接获得格式化的文本,这为您提供了更多处理结果的自由。

我个人建议将这两者结合起来,为不同的文件类型使用不同的高亮颜色集,以获得良好的高亮功能

<?php
function highlightText($text, $fileExt="")
{
if (
$fileExt == "php")
{
ini_set("highlight.comment", "#008000");
ini_set("highlight.default", "#000000");
ini_set("highlight.html", "#808080");
ini_set("highlight.keyword", "#0000BB; font-weight: bold");
ini_set("highlight.string", "#DD0000");
}
else if (
$fileExt == "html")
{
ini_set("highlight.comment", "green");
ini_set("highlight.default", "#CC0000");
ini_set("highlight.html", "#000000");
ini_set("highlight.keyword", "black; font-weight: bold");
ini_set("highlight.string", "#0000FF");
}
// ...

$text = trim($text);
$text = highlight_string("<?php " . $text, true); // highlight_string() requires opening PHP tag or otherwise it will not colorize the text
$text = trim($text);
$text = preg_replace("|^\\<code\\>\\<span style\\=\"color\\: #[a-fA-F0-9]{0,6}\"\\>|", "", $text, 1); // remove prefix
$text = preg_replace("|\\</code\\>\$|", "", $text, 1); // remove suffix 1
$text = trim($text); // remove line breaks
$text = preg_replace("|\\</span\\>\$|", "", $text, 1); // remove suffix 2
$text = trim($text); // remove line breaks
$text = preg_replace("|^(\\<span style\\=\"color\\: #[a-fA-F0-9]{0,6}\"\\>)(&lt;\\?php&nbsp;)(.*?)(\\</span\\>)|", "\$1\$3\$4", $text); // remove custom added "<?php "

return $text;
}
?>
www.phella.net
16 年前
当你在网站上引用高亮的 PHP 代码时,你需要转义引号。如果你引用了很多,可能会很烦人。这里有一个小片段,教你如何使引用整洁干净。像这样写你的代码

<?code()?>
$string = 'Here I put my code';
<?code()?>

在其他地方定义函数

<?
function code()
{
static $on=false;
if (!$on) ob_start();
else
{
$buffer= "<?\n".ob_get_contents()."?>";
ob_end_clean();
highlight_string($buffer);
}
$on=!$on;
}
?>
will at lolcat dot ca
1 年前
如果你想要使用类而不是内联样式,以下是用代码高亮显示的最佳方式

<?php
function highlightcode($text){

ini_set("highlight.comment", "c-comment");
ini_set("highlight.default", "c-default");
ini_set("highlight.html", "c-default");
ini_set("highlight.keyword", "c-keyword");
ini_set("highlight.string", "c-string");

$text =
trim(
str_replace(
'<br />',
"\n", // replace <br> with newlines
str_replace(
[
// leading <?php garbage
"<span style=\"color: c-default\">\n&lt;?php&nbsp;",
"<code>",
"</code>"
],
"",
highlight_string("<?php " . $text, true)
)
)
);

// replace colors
$classes = ["c-comment", "c-default", "c-keyword", "c-string"];

foreach(
$classes as $class){

$text = str_replace('<span style="color: ' . $class . '">', '<span class="' . $class . '">', $text);
}

return
$text;
}
?>

生成的输出看起来像这样

<span class="c-keyword">if(</span>condition<span class="c-keyword">){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="c-string">"HTML&nbsp;here"</span><span class="c-keyword">;
}</span>

希望这有帮助。
admin [at] develogix [dot] com
19 年前
我一直在努力寻找一个好的替代方案来替换 highlight_string() 函数;到目前为止,我已经想出了以下方法

<?
function get_sourcecode_string($str, $return = false, $counting = true, $first_line_num = '1', $font_color = '#666'){
$str = highlight_string($str, TRUE);
$replace = array(
'<font' => '<span',
'color="' => 'style="color: ',
'</font>' => '</span>',
'<code>' => '',
'</code>' => '',
'<span style="color: #FF8000">' =>
'<span style="color: '.$font_color.'">'
);
foreach ($replace as $html => $xhtml){
$str = str_replace($html, $xhtml, $str);
}
// 删除第一个 <span style="color:#000000;"> 和相应的 </span>
$str = substr($str, 30, -9);

$arr_html = explode('<br />', $str);
$total_lines = count($arr_html);
$out = '';
$line_counter = 0;
$last_line_num = $first_line_num + $total_lines;

foreach ($arr_html as $line){
$line = str_replace(chr(13), '', $line);
$current_line = $first_line_num + $line_counter;
if ($counting){
$out .= '<span style="color:'.$font_color.'">'
. str_repeat('&nbsp;', strlen($last_line_num) - strlen($current_line))
. $current_line
. ': </span>';
}
$out .= $line
. '<br />'."\n";
$line_counter++;
}
$out = '<code>'."\n".$out.'</code>."\n"';

if ($return){return $out;}
else {echo $out;}
}
?>

此函数通过将 font 标签替换为 span 标签来输出有效的 XHTML 1.1 代码。您还可以指定是否要返回或回显,输出行数,行数的颜色以及起始行数。

用法
<?
// $str = 包含 PHP 的字符串
// $return = true (返回) / false (回显)
// 默认值为 false
// $counting = true (计数) / false (不计数)
// 默认值为 true
// $start = 起始计数数字
// 默认值为 '1'
// $color = 计数颜色,前面有 #
// 默认值为 '#666'
get_sourcecode_string($str, $return, $counting, $start, $color);
?>
vouksh at vouksh dot info
18 年前
完全可用的、支持 XHTML 1.1 的 xhtml_highlight 函数。我添加了 stripslashes,因为我在没有它的情况下遇到了一些问题。应该可以安全地保留它,但如果您遇到问题,请随时将其删除。

<?
function xhtml_highlight($str) {
$hlt = highlight_string(stripslashes($str), true);
$fon = str_replace(array('<font ', '</font>'), array('<span ', '</span>'), $hlt);
$ret = preg_replace('#color="(.*?)"#', 'style="color: \\1"', $fon);
echo $ret;
return true;
}
?>
pyetrosafe at gmail dot com
5 年前
我读了“stanislav dot eckert at vizson dot de”的笔记,我很喜欢他创建的函数。
为了我的使用,我做了一些调整,使函数更实用,并允许一次传递多个参数,我还修改了 <code> 元素的样式,使用黑色背景和边距。

<?php

// 将 highlight_string 和 var_export 结合在一起
function hl_export()
{
try {
ini_set("highlight.comment", "#008000");
ini_set("highlight.default", "#FFFFFF");
ini_set("highlight.html", "#808080");
ini_set("highlight.keyword", "#0099FF; font-weight: bold");
ini_set("highlight.string", "#99FF99");

$vars = func_get_args();

foreach (
$vars as $var ) {
$output = var_export($var, true);
$output = trim($output);
$output = highlight_string("<?php " . $output, true); // highlight_string() 需要打开 PHP 标签,否则不会对文本进行着色
$output = preg_replace("|\\<code\\>|", "<code style='background-color: #000000; padding: 10px; margin: 10px; display: block; font: 12px Consolas;'>", $output, 1); // 编辑前缀
$output = preg_replace("|(\\<span style\\=\"color\\: #[a-fA-F0-9]{0,6}\"\\>)(&lt;\\?php&nbsp;)(.*?)(\\</span\\>)|", "\$1\$3\$4", $output); // 移除自定义添加的 "<?php "
echo $output;
}
} catch (
Exception $e) {
echo
$e->getMessage();
}
}

// 一次调试多个变量。
$var1 = 'Example String';
$var2 = 1987;
$var3 = null;
$var4 = true;
$var5 = array('Array', '05', 05, false, null);

hl_export( $var1, $var2, $var3, $var4, $var5 );
?>
Dmitry S
16 年前
另一种 XML 语法高亮显示方式。

<?php
function xml_highlight($s)
{
$s = htmlspecialchars($s);
$s = preg_replace("#&lt;([/]*?)(.*)([\s]*?)&gt;#sU",
"<font color=\"#0000FF\">&lt;\\1\\2\\3&gt;</font>",$s);
$s = preg_replace("#&lt;([\?])(.*)([\?])&gt;#sU",
"<font color=\"#800000\">&lt;\\1\\2\\3&gt;</font>",$s);
$s = preg_replace("#&lt;([^\s\?/=])(.*)([\[\s/]|&gt;)#iU",
"&lt;<font color=\"#808000\">\\1\\2</font>\\3",$s);
$s = preg_replace("#&lt;([/])([^\s]*?)([\s\]]*?)&gt;#iU",
"&lt;\\1<font color=\"#808000\">\\2</font>\\3&gt;",$s);
$s = preg_replace("#([^\s]*?)\=(&quot;|')(.*)(&quot;|')#isU",
"<font color=\"#800080\">\\1</font>=<font color=\"#FF00FF\">\\2\\3\\4</font>",$s);
$s = preg_replace("#&lt;(.*)(\[)(.*)(\])&gt;#isU",
"&lt;\\1<font color=\"#800080\">\\2\\3\\4</font>&gt;",$s);
return
nl2br($s);
}
?>
manithu at fahr-zur-hoelle dot org
19 年前
此函数将返回高亮显示的、xhtml 1.1 验证的代码(将 <font> 替换为 <span> 元素,并将颜色替换为样式属性)。

<?php

function xhtml_highlight($str) {
$str = highlight_string($str, true);
// 替换 <code><font color=""></font></code>
$str = preg_replace('#<font color="([^\']*)">([^\']*)</font>#', '<span style="color: \\1">\\2</span>', $str);
// 替换其他 <font> 元素
return preg_replace('#<font color="([^\']*)">([^\']*)</font>#U', '<span style="color: \\1">\\2</span>', $str);
}

?>
gaggge at gmail dot com
19 年前
这是一个用于从 MySQL 数据库中高亮显示类似 BBCode 样式的 PHP 代码的小函数。
(比如这样:[php]<?php echo "test"; ?>[/php])

<?php
function bbcode($s)
{
$s = str_replace("]\n", "]", $s);
$match = array('#\[php\](.*?)\[\/php\]#se');
$replace = array("'<div>'.highlight_string(stripslashes('$1'), true).'</div>'");
return
preg_replace($match, $replace, $s);
}
?>
Pyerre
17 年前
此函数将每个空格替换为 HTML 代码 &nbsp;(不换行空格)。
这不太好,因为文本不会换行,会导致宽度很大。
例如,在一个带边框的 div 中,文本会跨过边框。

我的解决方案
echo str_replace("&nbsp;", " ",highlight_string("Arise, you children of the fatherland",true));
echo str_replace("&nbsp;", " ",highlight_file("test.php",true));
stalker at ruun dot de
18 年前
给 vouksh:我扩展了你的函数。

<?php
function xhtmlHighlightString($str,$return=false) {
$hlt = highlight_string(stripslashes($str), true);
$fon = str_replace(array('<font ', '</font>'), array('<span ', '</span>'), $hlt);
$ret = preg_replace('#color="(.*?)"#', 'style="color: \\1"', $fon);
if(
$return)
return
$ret;
echo
$ret;
return
true;
}
function
xhtmlHighlightFile($path,$return=false) {
$hlt = highlight_file($path, true);
$fon = str_replace(array('<font ', '</font>'), array('<span ', '</span>'), $hlt);
$ret = preg_replace('#color="(.*?)"#', 'style="color: \\1"', $fon);
if(
$return)
return
$ret;
echo
$ret;
return
true;
}
?>
Dobromir Velev
16 年前
这是 Dimitry 的 xml_highlight 函数的改进版本。
我修复了一个 bug,该 bug 会替换标签名称的第一个字符。
并添加了一行,将制表符和空格替换为
不换行空格符号,以保持缩进。

<?
function xml_highlight($s){
$s = preg_replace("|<([^/?])(.*)\s(.*)>|isU", "[1]<[2]\\1\\2[/2] [5]\\3[/5]>[/1]", $s);
$s = preg_replace("|</(.*)>|isU", "[1]</[2]\\1[/2]>[/1]", $s);
$s = preg_replace("|<\?(.*)\?>|isU","[3]<?\\1?>[/3]", $s);
$s = preg_replace("|\=\"(.*)\"|isU", "[6]=[/6][4]\"\\1\"[/4]",$s);
$s = htmlspecialchars($s);
$s = str_replace("\t","&nbsp;&nbsp;",$s);
$s = str_replace(" ","&nbsp;",$s);
$replace = array(1=>'0000FF', 2=>'0000FF', 3=>'800000', 4=>'FF00FF', 5=>'FF0000', 6=>'0000FF');
foreach($replace as $k=>$v) {
$s = preg_replace("|\[".$k."\](.*)\[/".$k."\]|isU", "<font color=\"#".$v."\">\\1</font>", $s);
}

return nl2br($s);
}
?>
stanislav dot eckert at vizson dot de
9 年前
文档中说第一个参数是“要高亮的 PHP 代码,应该包括开始标签”。但似乎代码不仅应该,而且*必须*以 PHP 的开始标签开头,否则函数仍然会修改但不会高亮代码。
Mean^_^
15 年前
[由 danbrown AT php DOT net 编辑:以下注释包含用户提供的语法高亮版本。]

<style type="text/css">
.linenum{
text-align:right;
background:#FDECE1;
border:1px solid #cc6666;
padding:0px 1px 0px 1px;
font-family:Courier New, Courier;
float:left;
width:17px;
margin:3px 0px 30px 0px;
}

code {/* safari/konq hack */
font-family:Courier New, Courier;
}

.linetext{
width:700px;
text-align:left;
background:white;
border:1px solid #cc6666;
border-left:0px;
padding:0px 1px 0px 8px;
font-family:Courier New, Courier;
float:left;
margin:3px 0px 30px 0px;
}

br.clear {
clear:both;
}

</style>
<?php

function printCode($code, $lines_number = 0) {

if (!
is_array($code)) $codeE = explode("\n", $code);
$count_lines = count($codeE);

$r1 = "Code:<br />";

if (
$lines_number){
$r1 .= "<div class=\"linenum\">";
foreach(
$codeE as $line =>$c) {
if(
$count_lines=='1')
$r1 .= "1<br>";
else
$r1 .= ($line == ($count_lines - 1)) ? "" : ($line+1)."<br />";
}
$r1 .= "</div>";
}

$r2 = "<div class=\"linetext\">";
$r2 .= highlight_string($code,1);
$r2 .= "</div>";

$r .= $r1.$r2;

echo
"<div class=\"code\">".$r."</div>\n";
}

printCode('<?php echo "PHP Code" ?> ',1);
?>

by mean
分享想法。
祝好运 ^_^
fsx dot nr01 at gmail dot com
16 年前
这是一个来自 'vanessaschissato at gmail dot com' 的带行号的代码高亮程序的改进版本 - http://nl.php.net/manual/en/function.highlight-string.php#70456

<?php

function printCode($source_code)
{

if (
is_array($source_code))
return
false;

$source_code = explode("\n", str_replace(array("\r\n", "\r"), "\n", $source_code));
$line_count = 1;

foreach (
$source_code as $code_line)
{
$formatted_code .= '<tr><td>'.$line_count.'</td>';
$line_count++;

if (
ereg('<\?(php)?[^[:graph:]]', $code_line))
$formatted_code .= '<td>'. str_replace(array('<code>', '</code>'), '', highlight_string($code_line, true)).'</td></tr>';
else
$formatted_code .= '<td>'.ereg_replace('(&lt;\?php&nbsp;)+', '', str_replace(array('<code>', '</code>'), '', highlight_string('<?php '.$code_line, true))).'</td></tr>';
}

return
'<table style="font: 1em Consolas, \'andale mono\', \'monotype.com\', \'lucida console\', monospace;">'.$formatted_code.'</table>';
}

?>
Daniel
16 年前
嗯,我只是写了一点东西,它能高亮 HTML 代码......在接下来的几天里它会经历很多改变......在此之前,享受吧 =)

<?php
/*************************************\
CODE PANE 1.0 - SILVERWINGS - D. Suissa
\*************************************/

class HTMLcolorizer{
private
$pointer = 0; //Cursor position.
private $content = null; //content of document.
private $colorized = null;
function
__construct($content){
$this->content = $content;
}
function
colorComment($position){
$buffer = "&lt;<span class='HTMLComment'>";
for(
$position+=1;$position < strlen($this->content) && $this->content[$position] != ">" ;$position++){
$buffer.= $this->content[$position];
}
$buffer .= "</span>&gt;";
$this->colorized .= $buffer;
return
$position;
}
function
colorTag($position){
$buffer = "&lt;<span class='tagName'>";
$coloredTagName = false;
//As long as we're in the tag scope
for($position+=1;$position < strlen($this->content) && $this->content[$position] != ">" ;$position++){
if(
$this->content[$position] == " " && !$coloredTagName){
$coloredTagName = true;
$buffer.="</span>";
}else if(
$this->content[$position] != " " && $coloredTagName){
//Expect attribute
$attribute = "";
//While we're in the tag
for(;$position < strlen($this->content) && $this->content[$position] != ">" ;$position++){
if(
$this->content[$position] != "="){
$attribute .= $this->content[$position];
}else{
$value="";
$buffer .= "<span class='tagAttribute'>".$attribute."</span>=";
$attribute = ""; //initialize it
$inQuote = false;
$QuoteType = null;
for(
$position+=1;$position < strlen($this->content) && $this->content[$position] != ">" && $this->content[$position] != " " ;$position++){
if(
$this->content[$position] == '"' || $this->content[$position] == "'"){
$inQuote = true;
$QuoteType = $this->content[$position];
$value.=$QuoteType;
//Read Until next quotation mark.
for($position+=1;$position < strlen($this->content) && $this->content[$position] != ">" && $this->content[$position] != $QuoteType ;$position++){
$value .= $this->content[$position];
}
$value.=$QuoteType;
}else{
//No Quotation marks.
$value .= $this->content[$position];
}
}
$buffer .= "<span class='tagValue'>".$value."</span>";
break;
}

}
if(
$attribute != ""){$buffer.="<span class='tagAttribute'>".$attribute."</span>";}
}
if(
$this->content[$position] == ">" ){break;}else{$buffer.= $this->content[$position];}

}
//In case there were no attributes.
if($this->content[$position] == ">" && !$coloredTagName){
$buffer.="</span>&gt;";
$position++;
}
$this->colorized .= $buffer;
return --
$position;
}
function
colorize(){
$this->colorized="";
$inTag = false;
for(
$pointer = 0;$pointer<strlen($this->content);$pointer++){
$thisChar = $this->content[$pointer];
$nextChar = $this->content[$pointer+1];
if(
$thisChar == "<"){
if(
$nextChar == "!"){
$pointer = $this->colorComment($pointer);
}else if(
$nextChar == "?"){
//colorPHP();
}else{
$pointer = $this->colorTag($pointer);
}
}else{
$this->colorized .= $this->content[$pointer];
}
}
return
$this->colorized;
}
}
$curDocName = $_REQUEST['doc'];
$docHandle = fopen($curDocName,"r");
$docStrContent = fread($docHandle,filesize($curDocName));
fclose($docHandle);
$HTMLinspector = new HTMLcolorizer($docStrContent);
$document = $HTMLinspector->colorize();
?>

<html>
<head>
<style type="text/css">
/**********************\
* MOZILLA FIREFOX STYLE
\**********************/
/*pre{font-family:Tahoma;font-size:px;}*/
.tagName{color:purple;}
.tagAttribute{color:red;}
.tagValue{color:blue;}
.HTMLComment{font-style:italic;color:green;}
</style>
</head>
<body>
<?php
echo "<pre>".$document."</pre>";
?>
</body>
</html>
wm at tellinya dot com
16 年前
我想构建一个更好的函数,并将运算符 {}=- 从关键字 span 类中排除。我还想将 PHP 代码中使用的函数直接链接到 PHP 网站。
已经进行了更多更改和调整,输出效果更好!

在以下位置找到该函数
http://www.tellinya.com/art2/262/highligh-php-syntax/
并永久放弃旧的 PHP 函数。
已在 PHP 5.2.0 上测试和构建。

期待任何反馈。
zer0
19 年前
关于我下面的代码

抱歉,我完全忘记了 str_ireplace 是 PHP 5 的,不知何故。此外,还有一个错误我错过了(太多熬夜了 ;))。以下是更正后的代码

<?php
function highlight_code($code, $inline=false, $return=false) // Pre php 4 support for capturing highlight
{
(string)
$highlight = "";
if (
version_compare(PHP_VERSION, "4.2.0", "<") === 1 )
{
ob_start(); // start output buffering to capture contents of highlight
highlight_string($code);
$highlight = ob_get_contents(); // capture output
ob_end_clean(); // clear buffer cleanly
}
else
{
$highlight=highlight_string($code, true);
}

# Using preg_replace will allow PHP 4 in on the fun
if ( $inline === true )
$highlight=preg_replace("/<code>/i","<code class=\"inline\">",$highlight);
else
$highlight=preg_replace("/<code>/i","<code class=\"block\">",$highlight);

if (
$return === true )
{
return
$highlight;
}
else
{
echo
$highlight;
}
}
?>
Sam Wilson
19 年前
manithu at fahr-zur-hoelle dot org 忘记了一件事:修复断点标签。添加以下内容应该可以解决问题。

<?php
$str
= str_replace("<br>", "<br />", $str);
?>
bpgordon at gmail dot com
19 年前
关于 dleavitt AT ucsc DOT edu 的评论

作为通用的良好编程实践,你可能想使用 md5($html_string) 而不是 "piggusmaloy"。以防万一 "piggusmaloy" 实际上在 $html_string 中。
trixsey at animania dot nu
19 年前
我做了一个很酷的函数。语法着色、行号、表格中每行不同的背景颜色。

<?
function showCode($code) {
$html = highlight_string($code, true);
$html = str_replace("\n", "", $html);
$rows = explode("<br />", $html);

$row_num = array();
$i = 1;

foreach($rows as $row) {
if($i < 10) {
$i = "0".$i;
}

if($i==1) {
$row_num[] = "<tr><td><code><font color=\"#000000\"><code>$i</code></font>\t$row</code></td></tr>";
}

if($i!=1) {
if(is_int($i/2)) {
$row_num[] = "<tr bgcolor=\"#F9F9F9\"><td><code><font color=\"#000000\">$i</font>\t$row</code></td></tr>";
} else {
$row_num[] = "<tr><td><code><font color=\"#000000\">$i</font>\t$row</code></td></tr>";
}
}

$i++;
}
return "<pre>\nFilename: <b>$_GET[file]</b>\n<table
style=\"border:1px #000000 solid\">".implode($row_num)."</table></pre>";
}
?>
support at superhp dot de
19 年前
使用此函数,你可以用行号突出显示 php 代码

<?php
function highlight_php($string)
{
$Line = explode("\n",$string);

for(
$i=1;$i<=count($Line);$i++)
{
$line .= "&nbsp;".$i."&nbsp;<br>";
}

ob_start();
highlight_string($string);
$Code=ob_get_contents();
ob_end_clean();

$header='<table border="0" cellpadding="0" cellspacing="0" width="95%" style="border-style: solid; border-width:1px; border-color: white black black white">
<tr>
<td width="100%" colspan="2" style="border-style: solid; border-width:1px; border-color: white; background-color: #99ccff; font-family:Arial; color:white; font-weight:bold;">Php-Code:</td>
</tr>
<tr>
<td width="3%" valign="top" style="background-color: #99ccff; border-style: solid; border-width:1px; border-color: white;"><code>'
.$line.'</code></td>
<td width="97%" valign="top" style="background-color: white;"><div style="white-space: nowrap; overflow: auto;"><code>'
;

$footer=$Code.'</div></code></td>
</tr>
</table>'
;

return
$header.$footer;
}
?>
admin at bwongar dot com
19 年前
我没有从其他 XHTML_highlight 函数中获得预期的结果,所以我开发了自己的函数,它效率更高。旧的函数使用 preg_replace 将标签内容替换为 span 标签。在我的函数中,唯一的 preg_replace 用于提取颜色属性,并将其放在 str_replace 替换的 span 标签中。

<?php
function xhtml_highlight($str) {
$str = highlight_string($str, true);
$str = str_replace(array('<font ', '</font>'), array('<span ', '</span>'), $str);
return
preg_replace('#color="(.*?)"#', 'style="color: \\1"', $str);
}

?>
peter at int8 dot com
18 年前
这还没有提到,但似乎 PHP 的开始和结束标签需要是代码片段的一部分。
<?php highlight_string("<? \$var = 15; ?>"); ?>
有效,而
<?php highlight_string("\$var = 15;"); ?>
无效。这对那些想要显示小代码片段的人来说很不利,但就这样吧。如果我没记错的话,这个函数的早期版本没有这个要求。
supremacy2k at gmail dot com
17 年前
vanessaschissato at gmail dot com 在 17-Oct-2006 05:04 的函数的简化版本。

因为它在保持代码完整性方面遇到了问题。(它删除了 /* )

function showCode($code) {
$code = highlight_string($code, true);
$code = explode("<br />", $code);

$i = "1";
foreach ($code as $line => $syntax) {
echo "<font color='black'>".$i."</font> ".$syntax."<br>";
$i++;
}
}
tyler dot reed at brokeguysinc dot com
17 年前
这是一小段代码,我用它来显示文件源代码,我从另一个 php 函数页面上的示例中借鉴了部分想法。

这段代码获取一个 php 文件,突出显示它,并在它旁边放置一个行号。非常适合即时调试。

<?php
// 将文件放入数组中
$lines = file('index.php');

// 遍历我们的数组,将 HTML 源代码显示为 HTML 源代码;并显示行号。
echo('<table border=0 cellpadding=0 cellspacing=0>');
foreach (
$lines as $line_num => $line) {
echo(
'<tr>');
echo(
'<td bgcolor = "#cccccc">');
echo(
'<code>' . ($line_num + 1) . '</code>');
echo(
'</td>');
echo(
'<td>');
highlight_string($line);
echo(
'</td>');
echo(
'</tr>');
}

?>
joshuaeasy4u at gmail dot com
10 年前
<?php
function printCode($source_code)
{
if (
is_array($source_code))
return
false;
$source_code=explode("\n",str_replace(array("\r\n","\r"),"\n",$source_code));
$line_count=1;
foreach (
$source_code as $code_line)
{
$formatted_code .='<tr><td>'.$line_count.'</td>';
$line_count++;
if (
ereg('<\?(php)?[^[:graph:]]',$code_line))
$formatted_code.='<td>'.str_replace(array('<code>','</code>'),'',highlight_string($code_line,true)).'</td></tr>';
else
$formatted_code .='<td>'.ereg_replace('(&lt;\?php&nbsp;)+','',str_replace(array('<code>','</code>'),'',highlight_string('<?php '.$code_line,true))).'</td></tr>';
}
return
'<table style="font: 1em Consolas, \'andale mono\', \' monotype.com\', \'lucida console\', monospace;">'.$formatted_code.'</table>';
}
?>
zero
19 年前
在某些情况下,我发现将 highlight_string 格式的 <code>...</code> 作为段落的一部分内联,或者作为块来演示多行代码是很有用的。我创建了这个函数来帮助解决这个问题。

<?php
function highlight_code($code, $inline=false, $return=false) // Pre php 4 support for capturing highlight
{
(string)
$highlight = "";
if (
version_compare(phpversion(), "4.2.0", "<") === 1 )
{
ob_start(); // start output buffering to capture contents of highlight
highlight_string($code);
$highlight = ob_get_contents(); // capture output
ob_end_clean(); // clear buffer cleanly
}
else
{
$highlight=highlight_string($data, true);
}

## The classes below need to correspond to a stylesheet!
if ( $inline === true )
$highlight=str_ireplace("<code>","<code class=\"inline\">",$highlight);
else
$highlight=str_ireplace("<code>","<code class=\"block\">",$highlight);


if (
$return === true )
{
return
$highlight;
}
else
{
echo
$highlight;
}
}
?>
Dmitry S
16 年前
简单的 XML 语法高亮显示。

<?php
function xml_highlight($s)
{
$s = preg_replace("|<[^/?](.*)\s(.*)>|isU","[1]<[2]\\1[/2] [5]\\2[/5]>[/1]",$s);
$s = preg_replace("|</(.*)>|isU","[1]</[2]\\1[/2]>[/1]",$s);
$s = preg_replace("|<\?(.*)\?>|isU","[3]<?\\1?>[/3]",$s);
$s = preg_replace("|\=\"(.*)\"|isU","[6]=[/6][4]\"\\1\"[/4]",$s);
$s = htmlspecialchars($s);
$replace = array(1=>'0000FF', 2=>'808000', 3=>'800000', 4=>'FF00FF', 5=>'FF0000', 6=>'0000FF');
foreach(
$replace as $k=>$v)
{
$s = preg_replace("|\[".$k."\](.*)\[/".$k."\]|isU","<font color=\"".$v."\">\\1</font>",$s);
}
return
nl2br($s);
}
?>
To Top