webForumDet fria alternativet

Få htmlentities att hoppa över vissa taggar?

PHP

6 svar · 303 visningar · startad av aasah

Medlem sedan mars 20034 471 inlägg
Frågan#1

Jag funderar på att sätta ihop en gästbok. Jag vill att man ska kunna få fet, kursiv och understruken text, samt att "<br>" ska funka. Däremot vill jag att ev andra taggar ska ersättas enligt htmlentities vid utskriften på skärmen.

Finns det något smidigt sätt att fixa detta? Eller får man ersätta dessa taggar med tex [.] (som de flesta communities gör), köra htmlentities först, och översätta valda varianter av [.] till <.> därefter på den text som ska visas?

Medlem sedan mars 20032 667 inlägg
#2

Gör en funktion där du först kör hela texten genom htmlentities. Gör sedan en replace i funktionen på de element som inte ska ingå. Exempelvis för <br> får du & l t ; b r & g t ; utan mellanslag. replaca tillbaka den till en vanlig <br>.

Själv brukar jag dock använda forumkod [blaha]

Medlem sedan mars 20032 667 inlägg
#3

Ett exempel på hur jag menar. Bold fungerar men inte kursiv.

$text = "<i>hej</i> hopp <b>du</b> glade";

function formatText($text) { 
    $text = htmlentities($text);
    $text = str_replace( '&lt;b&gt;' , "<b>", $text);
    $text = str_replace( '&lt;/b&gt;' , "</b>", $text);
    // Lägg till alla taggar som ska fungera

    return $text;
}

print formatText($text);

RED: Snyggade till med lite indenteringar

Medlem sedan dec. 20042 245 inlägg
#4
$text = "<i>hej</i> hopp <br> <b>du</b> glade";

function formatText($text) { 
    $text = htmlspecialchars($text); // tycker bättre om htmlspecialchars 
    $arr1 = array('&lt;b&gt;', '&lt;/b&gt;', '&lt;i&gt;', '&lt;/i&gt;', '&lt;br&gt;');
    $arr2 = array('<b>', '</b>', '<i>', '</i>', '<br>');
    return str_replace($arr1, $arr2, $text);
}

print formatText($text);

Så tror jag man kan göra också. :)

Medlem sedan mars 20034 471 inlägg
#5

Ah! Tack för svaren! :D

zcorpan skrev:

htmlspecialchars($text); // tycker bättre om htmlspecialchars

Vad är det som gör att du föredrar den?

Medlem sedan mars 20032 667 inlägg
#6

Den frågan har jag också ställt mig en gång och svaret är helt beroende på hur man ser på saken. Svaret jag fick då kan du läsa här:
http://www.webforum.nu/showthread.php?s=&postid=407734#post407734

Medlem sedan mars 20034 471 inlägg
#7

Marcus E i det ovan länkade inlägget skrev:

htmlspecialchars i kombination med korrekt inställd teckenuppsättning är bäst att använda.

htmlspecialchars byter inte ut tecken i den utökade ascii-tabellen, vilket inte behövs om man ställer in rätt teckenuppsättning. Har man dock bestämt sig för att strunta i det och köra med &aring; &auml; etc. är htmlentities att föredra.

Med korrekt inställd teckenuppsättning avses raden i META-headers eller? :q

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)