Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: HTML-koodin väritys

HTML5 [29.12.2013 18:01:50]

#

Olen yrittänyt saada seuraavan koodin toimimaan okein:

<style>
	.att {color:#f00;}
	.kom {color:#34803a;}
	.arv {color:#8000ff;}
	.tag {color:#00f;}
	.ent {font-style:italic;}
</style>

<?php
function korostaHtml($koodi) {

	$koodi = htmlentities($koodi);

	$etsi = array(
		'~(\s)([a-z].*?=)~',					// attribuutit
		'~(&lt;\!--.*?--&gt;)~s',				// kommentit
		'~(&quot;[a-zA-Z0-9\/].*?&quot;)~',		// arvot
		'~(&lt;[a-z]+)~',						// avaustagien aloitukset
		'~(/*&gt;)~',							// avaustagien ja itsensä sulkevien tagien lopetukset
		'~(&lt;/[a-z].*?&gt;)~',				// sulkutagit
		'~(&amp;.*?;)~',						// entiteetit
	);
	$korvaa = array(
		'$1<span class="att">$2</span>',
		'<span class="kom">$1</span>',
		'<span class="arv">$1</span>',
		'<span class="tag">$1</span>',
		'<span class="tag">$1</span>',
		'<span class="tag">$1</span>',
		'<span class="ent">$1</span>',
    );
	$koodi = preg_replace($etsi, $korvaa, $koodi);

	return '<pre>' . $koodi . '</pre>';
}

echo korostaHtml('
<!-- This is an
HTML comment -->
<a href="home.html" style="color:blue;">Home</a>
<p>Go &amp; here.</p>
<!-- This is an HTML comment -->
<form action="/login.php" method="post">
    <input type="text" value="User Name" autofocus />
</form>
');

?>

Ongelmia on kaksi:
– Kommentin suurempi kuin -merkki tulkitaan virheellisesti aloitustagin lopuksi
– Boolean-attribuutteja ei tunnisteta ollenkaan

Olen yrittänyt saada järkevää ratkaisua, mutta koko homma muuttuu hirveäksi purkaksi, eikä koodi ala silti toimimaan oikein.

Metabolix [29.12.2013 18:08:15]

#

Kaikki korvaukset pitää yhdellä lausekkeella ja esimerkiksi funktiolla preg_replace_callback, jotta samaa kohtaa ei käsiteltäisi useaan kertaan.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta