Gå til innhold

Highlight-funksjonen lager DÅRLIG HTML


Anbefalte innlegg

-i alle fall om man bruker strict doctype.

Da mener jeg f.eks highlight_file-funksjonen

Går det an å endre på måten HTML-koden blir skrevet på?

Slik den er nå er det jo umulig å få validert koden sin i et dokument med highlight..

Lenke til kommentar
Videoannonse
Annonse

Dette er min variant, som skriver pen og validert kode. :)

function highlight($string, $linenumbers = false)
{
echo '<pre class="code">';
$source = highlight_string($string, true);
$search[0] = '<font color="'.ini_get('highlight.html').'">';
$search[1] = '<font color="'.ini_get('highlight.default').'">';
$search[2] = '<font color="'.ini_get('highlight.keyword').'">';
$search[3] = '<font color="'.ini_get('highlight.string').'">';
$search[4] = '<font color="'.ini_get('highlight.comment').'">';
$search[5] = '</font>';
$search[6] = '<br />';
$search[7] = '\r';
$search[8] = ' ';
$search[9] = '<code>';
$search[10] = '</code>';
$replace[0] = '<span class="html">';
$replace[1] = '<span class="default">';
$replace[2] = '<span class="keyword">';
$replace[3] = '<span class="string">';
$replace[4] = '<span class="comment">';
$replace[5] = '</span>';
$replace[6] = "\r\n";
$replace[7] = '';
$replace[8] = ' ';
$replace[9] = '';
$replace[10] = '';
$source = str_replace("\n", "", $source);
$source = str_replace($search,$replace,$source);
$search[0] = '<?php';
$search[1] = '?>';
$replace[0] = '<span class="string"><?php</span>';
$replace[1] = '<span class="string">?></span>';
$source = str_replace($search,$replace,$source);

if($linenumbers)
{
 $lines = explode("\n",$source);
 $counter = 1;
 foreach($lines as $item)
 {
 	switch(strlen($counter))
 	{
   case 1:
   {
   	echo('<span class="line">'.$counter.' </span>  '.$item);
   	$counter++;
   	break;
   }
   case 2:
   {
   	echo('<span class="line">'.$counter.'</span>  '.$item);
   	$counter++;
   	break;
   }
   default:
   {
   	echo('<span class="line">'.$counter.'</span>  '.$item);
   	$counter++;
   	break;
   }
 	}
 }
}
else
 echo $source;

echo '</pre>';
}

 

Den funksjonen som fikser linjenummere er IKKE optimal (derfor false som standard). Resten hentet jeg fra manualen og modifiserte.

 

Du må ha et CSS-ark med klassene som er i kodebiten over.

Lenke til kommentar

Takk for koden!

Jeg har skiftet ut highlight_string med highlight_file, det går vel bra?

 

Jeg får en feilmelding;

Warning: Wrong parameter count for highlight_file() in (path)1.php on line 5

Du kan se selv

her.

 

Noen som vet hvorfor feilmeldingen kommer? Har prøvd å ta vekk "true" fra highlight_file($string, true); men da ble bare den "dårlige" versjonen av highlight-koden brukt.

 

Edit: Line 5 er linje 4 i posten til Lokaltog.

Endret av svamp
Lenke til kommentar
Jeg får en feilmelding;

Warning: Wrong parameter count for highlight_file() in (path)1.php on line 5

Du kan se selv

her.

Parameter nummer to ble ikke tilgjengelig før PHP 4.2.0, hvis du har en tidligere versjon enn denne fungerer ikke highlightscriptet mitt med mindre du implementerer OB-kontroll i funksjonen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...