PHP Conference Japan 2024

highlight_string

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

highlight_string字符串语法高亮

描述

highlight_string(字符串 $string, 布尔值 $return = false): 字符串|true

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

参数

字符串

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

返回

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

返回值

如果 return 设置为 true,则返回高亮的代码作为字符串,而不是打印它。否则,它将返回 true

变更日志

版本 描述
8.4.0 返回类型从 字符串|布尔值 更改为 字符串|true
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 条注释

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() 需要开头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;
}
?>
www.phella.net
17年前
当你在你的网站上引用高亮的PHP代码时,你需要转义引号。如果你引用了很多,可能会很烦人。这里有一个小片段,说明如何使引用整洁和干净。像这样编写你的代码

<?code()?>
$string = '这里我放我的代码';
<?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", // 将 <br> 替换为换行符
str_replace(
[
// 前导 <?php 垃圾
"<span style=\"color: c-default\">\n&lt;?php&nbsp;",
"<code>",
"</code>"
],
"",
highlight_string("<?php " . $text, true)
)
)
);

// 替换颜色
$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
19年前
完全有效的、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 = '示例字符串';
$var2 = 1987;
$var3 = null;
$var4 = true;
$var5 = 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
20 年前
此函数将返回高亮显示的、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函数。
我修复了一个错误,该错误替换了标签名称的第一个字符,
并添加了一行将制表符和空格替换为
不间断空格符号以保持缩进。

<?
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">
/**********************\
* 火狐样式
\**********************/
/*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>
[email protected]
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支持捕获高亮
{
(string)
$highlight = "";
if (
version_compare(PHP_VERSION, "4.2.0", "<") === 1 )
{
ob_start(); // 开始输出缓冲以捕获高亮内容
highlight_string($code);
$highlight = ob_get_contents(); // 捕获输出
ob_end_clean(); // 清理缓冲区
}
else
{
$highlight=highlight_string($code, true);
}

# 使用preg_replace将允许PHP 4参与其中
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年前
[email protected] 忘记了一件事:修复换行标签。添加以下内容应该可以解决问题。

<?php
$str
= str_replace("<br>", "<br />", $str);
?>
[email protected]
19年前
关于[email protected]的评论

您可能希望使用md5($html_string)而不是“piggusmaloy”,这是一种普遍良好的编程实践。以防万一“piggusmaloy”实际上在$html_string中。
[email protected]
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>";
}
?>
[email protected]
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;
}
?>
[email protected]
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);
}

?>
[email protected]
18 年前
这一点还没有提到,但似乎PHP的开始和结束标签需要作为代码片段的一部分。
<?php highlight_string("<? \$var = 15; ?>"); ?>
有效,而
<?php highlight_string("\$var = 15;"); ?>
无效。这对那些想要显示小代码片段的用户来说是不幸的,但就是这样。如果我没记错的话,此函数的早期版本没有此要求。
[email protected]
17年前
简化[email protected]在2006年10月17日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++;
}
}
[email protected]
18 年前
这是一小段我用来显示文件源代码的代码,我从另一个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>');
}

?>
[email protected]
11年前
<?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) // PHP 4 版本及以下的捕获高亮显示支持
{
(string)
$highlight = "";
if (
version_compare(phpversion(), "4.2.0", "<") === 1 )
{
ob_start(); // 开始输出缓冲以捕获高亮显示的内容
highlight_string($code);
$highlight = ob_get_contents(); // 捕获输出
ob_end_clean(); // 清理缓冲区
}
else
{
$highlight=highlight_string($data, true);
}

## 下面的类需要与样式表相对应!
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