Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 12-11-2003, 13:23
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Hoi iedereen,

Ik loop tegen een probleem aan voor mijn website-software draaiend op fluffles.net. Deze stelt gebruikers met de juiste userlevel om berichten te plaatsen. Hierbij kunnen dus ook speciale karakters gebruikt worden, zoals het euroteken (€). Hierdoor valideert mijn webpagina echter niet meer met de XHTML-specificatie. Ik wil dus dat al deze karakters omgezet worden naar HTML-code. In het geval van het euro-teken dus €.

Nu kan dat, met de functies htmlentities() en htmlspecialchars().

Het probleem is, dat indien ik deze functies gebruik om het ingevoerde bericht te parsen, de HTML-code meegenomen wordt en ik dus geen HTML kan gebruiken in m'n posts. Dit is niet de bedoeling, en dus bedacht ik het volgende:

Als nou eerst het ingevoerde bericht door een HTML-filter heengaat, blijft de tekst over die niet bestaat uit HTML-code zoals <b>. Dan kan ik htmlentities gebruiken en is het resultaat dus HTML code + de HTML specialchars.

Volg je het nog? Ik wil dus HTML-code gebruiken maar ook < en > kunnen blijven tikken als onderdeel van m'n bericht. Met htmlentities en htmlspecialchars kan dat niet.

Weten jullie een manier hoe dit wel kan?
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Advertentie
Oud 12-11-2003, 15:14
deathz0rz
deathz0rz is offline
ik zou een UBB-parser maken/kopieren

edit:

optie 2: schrijf een regexp die HTML tags matcht. moet je wel even de karakteristieken van een HTML tag bedenken. bijvoorbeeld:
1 geen < of > tussen de < en >
2 een letter na de <
3 een afsluit tag (met backreferences)

zoiets
__________________
Ooit. Dan.

Laatst gewijzigd op 12-11-2003 om 15:16.
Met citaat reageren
Oud 12-11-2003, 17:12
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Volgens mij is de manier van deathz0rz de enige zoals jij die bedoelt. Dan moet je dus alle tags parsen (ik zou er daarbij vanuit gaan dat je zelf zorgt voor well-formed XML), en daar tussenin alle special chars parsen. Zelf vind ik dit echter een nogal lelijke oplossing.

Ik zou dus een andere oplossing gebruiken. In principe hoef je tenslotte in XHTML alleen <, > en & te escapen. Dan heb je nog een probleem met het euro-teken, maar om dat op te lossen kun je je charset op ISO-8859-15 zetten in plaats van -1. Daarmee heb je de Latin-1 set + het euro-teken. Dan heb je nog een paar chars over die je moet encoden, en als je er daar veel van hebt (bijvoorbeeld in een HTML tut) zou ik ze in een ander blok (zoals hier [code]) zetten waarbinnen je wel alles encode. Dat is goed te doen. Voor het fixen van de & heb ik wel een functie die je wellicht handig vindt (op deze manier gepost omdat de UBB-parser van vBB dikke stront door een trechter zuigt: parsed smilies in [php], en encodeert < en > niet).

Een leuke manier om een min of meer statische site te onderhouden is overigens met XML, XSLT en Ant. Als je daar meer info over wil hebben moet je het zeggen.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 12-11-2003, 18:57
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Maar ik wil wel HTML in m'n messages kunnen gebruiken, dus gewoon de < en > converten is geen optie.

Wat deathz0rz zegt is idd een optie, maar kan het niet anders?

Een UBB-style parser heb ik al, alleen wil ik dus ook de html special chars encoden naar &amp;lt; enzo.
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 12-11-2003, 20:22
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Ik bedoel dan ook dat je als je daadwerkelijk een < of > wil laten zien gewoon &lt; of &gt; moet gebruiken. Dan ben je van het gezeik af, en zo moeilijk is dat niet (tenzij je uitgebreide zichtbare snippets HTML wil gaan laten zien, maar dan zou je die in een speciale div kunnen zetten waarin ze wel geconverteerd worden).
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 12-11-2003, 20:37
deathz0rz
deathz0rz is offline
misschien kan je als je html typt << gebruiken en die dan tijdelijk replacen. ofzo.
__________________
Ooit. Dan.
Met citaat reageren
Oud 12-11-2003, 23:59
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Citaat:
Manuzhai schreef op 12-11-2003 @ 21:22:
Ik bedoel dan ook dat je als je daadwerkelijk een < of > wil laten zien gewoon &amp;lt; of &amp;gt; moet gebruiken.
Tip: gebruik &amp;amp;lt;, nu zie je namelijk ook daadwerkelijk een < en >.

Maar dit kan ja, maar dan moet ik dus al html'ed code gebruiken. Elke keer &amp;euro; typen enzo. Ik zou zo graag willen dat dit automatisch gebeurt.
Citaat:
deathz0rz schreef op 12-11-2003 @ 21:37:
misschien kan je als je html typt << gebruiken en die dan tijdelijk replacen. ofzo.
Nou bij HTML lijkt me dat niet handig, maar ik kan idd een parser maken die << en >> met een respectievelijk &amp;lt; en &amp;gt; vervangt.

Een ander idee is om HTML-code binnen de tags te houden. Binnen die tags wordt < en > dan dus niet geparsed naar &amp;lt; en &amp;gt;.
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 13-11-2003, 03:27
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Citaat:
Enlightenment schreef op 13-11-2003 @ 00:59:
Tip: gebruik &amp;amp;lt;, nu zie je namelijk ook daadwerkelijk een < en >.

Maar dit kan ja, maar dan moet ik dus al html'ed code gebruiken. Elke keer &amp;euro; typen enzo. Ik zou zo graag willen dat dit automatisch gebeurt.
Uhm, zoals het er staat was mijn bedoeling? En trouwens, &euro; is niet nodig, hoor. In ieder geval in XHTML 1.1 (waarin ik net even getest heb) mag je gewoon het €-teken in je source gebruiken, maar alleen als je ISO-8859-15 als charset hebt. En dat geldt ook voor alle andere karakters, op < en > en & na, maar die laatste kan je via die functie fixen.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 13-11-2003, 07:54
Verwijderd
Voor zover ik het weet transansformeert een textarea de special chars automatisch. Dus een / wordt %xx.
Met citaat reageren
Oud 13-11-2003, 08:24
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Citaat:
eddie schreef op 13-11-2003 @ 08:54:
Voor zover ik het weet transansformeert een textarea de special chars automatisch. Dus een / wordt %xx.
Nope, zie bijvoorbeeld:
http://validator.w3.org/check?uri=ht...ss=1&verbose=1

Ik kan idd die andere charset gebruiken zodat ik het euroteken gewoon kan gebruiken en niet met &amp;euro; hoef te werken. Maar ik wil het eigenlijk netjes doen, zodat andere karakters zoals « en » en nog vele anderen als html-specialchars worden geparsed.

Nu kan ik voor elke specialchar een parser maken, en voor de < en > dan << en >> gebruiken, zodat ik deze kan parsen. < en > kan ik niet parsen, omdat ik deze niet kan onderscheiden van HTML-code. Tenzij ik daar een mega-ingewikkeld regexp-search voor maak, en ik heb echt 0 verstand van regexp's.

Lijkt dit jullie de beste methode?
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 13-11-2003, 08:55
Verwijderd
Citaat:
Enlightenment schreef op 13-11-2003 @ 09:24:
Nope
Een andere browser dan IE dan? AFAIK doet Opera het wel.
Met citaat reageren
Oud 13-11-2003, 09:22
Chimera
Avatar van Chimera
Chimera is offline
Citaat:
Enlightenment schreef op 12-11-2003 @ 19:57:
Wat deathz0rz zegt is idd een optie, maar kan het niet anders?
Eigen parser-functie maken? Zo veel hoeft er niet gereplaced te worden.
Met citaat reageren
Oud 13-11-2003, 11:16
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Nouja ik moet alle (X)HTML tags af dan, en ook nog eens controleren of ze wel goed afgesloten zijn, en dat zonder kennis van regexp's?
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 13-11-2003, 11:30
Fade of Light
Avatar van Fade of Light
Fade of Light is offline
Citaat:
Enlightenment schreef op 13-11-2003 @ 12:16:
Nouja ik moet alle (X)HTML tags af dan, en ook nog eens controleren of ze wel goed afgesloten zijn, en dat zonder kennis van regexp's?
reguliere expressies zijn simpel, het probleem is alleen ff rustig het overzicht te houden
Met citaat reageren
Oud 13-11-2003, 12:05
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Simpel my ass!

Ik vind dit nog makkelijker:

while (strstr($msg,'url:'))
$msg = substr_replace($msg,'<a target="_blank" href="'.substr($msg, strpos($msg,'url:') + 4, strpos($msg,'{')-strpos($msg,'url:')-4).'">'. substr($msg,strpos($msg, '{')+1, strpos($msg, '}')-strpos($msg, '{')-1). '</a>',strpos($msg,'url:'), strpos($msg,'}')-strpos($msg, 'url:')+1);

Dit is de parse functie voor de url:http://www.fluffles.net{www.fluffles.net klik hier!} UBB-like tag. Inmiddels vervangen door een véél minder dirty parse loop.
__________________
Per undas adversas (tegen de stroom in)

Laatst gewijzigd op 13-11-2003 om 12:09.
Met citaat reageren
Oud 13-11-2003, 12:11
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Citaat:
eddie schreef op 13-11-2003 @ 09:55:
Een andere browser dan IE dan? AFAIK doet Opera het wel.
Volgens mij begrijp je me verkeerd, ik zie uiteindelijk wel euro-tekens in het document, maar mijn document is niet meer XHTML compliant, en dat vind ik belangrijk. Ik doe het graag op de nette manier.

(ik gebruik Mozilla Firebird)
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 13-11-2003, 12:38
Verwijderd
Citaat:
Enlightenment schreef op 13-11-2003 @ 13:11:
Volgens mij begrijp je me verkeerd, ik zie uiteindelijk wel euro-tekens in het document, maar mijn document is niet meer XHTML compliant, en dat vind ik belangrijk. Ik doe het graag op de nette manier.

(ik gebruik Mozilla Firebird)
http://www.w3.org/TR/html401/interac...m-content-type

je kan toch kijken welke %xx waarde wordt meegestuurd voor het euro teken, en die vervangen door de correcte code?
Met citaat reageren
Oud 13-11-2003, 13:59
deathz0rz
deathz0rz is offline
Citaat:
Enlightenment schreef op 13-11-2003 @ 13:05:
Simpel my ass!

Ik vind dit nog makkelijker:

while (strstr($msg,'url:'))
$msg = substr_replace($msg,'<a target="_blank" href="'.substr($msg, strpos($msg,'url:') + 4, strpos($msg,'{')-strpos($msg,'url:')-4).'">'. substr($msg,strpos($msg, '{')+1, strpos($msg, '}')-strpos($msg, '{')-1). '</a>',strpos($msg,'url:'), strpos($msg,'}')-strpos($msg, 'url:')+1);

Dit is de parse functie voor de url:http://www.fluffles.net{www.fluffles.net klik hier!} UBB-like tag. Inmiddels vervangen door een véél minder dirty parse loop.
dat makkelijker dan een RegExp? rofl
__________________
Ooit. Dan.
Met citaat reageren
Oud 14-11-2003, 03:56
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Citaat:
deathz0rz schreef op 13-11-2003 @ 14:59:
dat makkelijker dan een RegExp? rofl


One big messy shit huh. Toen ik 'em klaar had kwam ik even niet meer bij van het lachen, want zonder highlighting is daar niets meer van te maken natuurlijk. bovendien was het wel heel erg dirty, heb het nu wel netjes gedaan.

Maar regexp's ken ik gewoon niet. Een kleine tutorial heb ik wel gelezen en dat kon ik volgen
maar andere docs gaan al snel verder tot complexere shit en dan weet ik het niet meer.
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 14-11-2003, 03:57
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Maar bedankt mensen, ik ga het nu zo doen:

Ik ga alles door een htmlentities filter gooien, muv de < en > tags die voor html gebruikt worden. Dan de << en >> converten naar &amp;lt; en &amp;gt;. Dan ben ik eigenlijk klaar.

Als het gelukt is laat ik het jullie wel weten.
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 14-11-2003, 07:00
deathz0rz
deathz0rz is offline
ok, zie dan ook: http://nl3.php.net/manual/en/functio...tion-table.php
__________________
Ooit. Dan.
Met citaat reageren
Oud 14-11-2003, 09:18
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Uhm, je moet dus wel op speciale gevallen letten. Misschien wil je wel ergens <a href="index.php">>> hebben, en ik denk dat dat een beetje misgaat.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 14-11-2003, 12:48
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Links gaan bij mij zo:

int:/computers/hardware{Hardware}
ext:http://www.google.com{Google}

int = internal link
ext = external link (opent in extern window met target="_blank")
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 14-11-2003, 13:03
Verwijderd
Citaat:
Enlightenment schreef op 14-11-2003 @ 13:48:
opent in extern window met target="_blank"
En dat is niet geldig XHTML
Met citaat reageren
Advertentie
Oud 15-11-2003, 15:35
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Citaat:
eddie schreef op 14-11-2003 @ 14:03:
En dat is niet geldig XHTML
Wel als het Transitional is.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 15-11-2003, 19:20
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
XHTML 1.0 Strict DTD

K'zie wel hoe ik het doe. Vind het wel jammer want zie niet in waarom dat weg zou moeten. Vind het juist goed dat er een advisory URI target is, default in nieuw window/tab openen of in zelfde tab.

__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 16-11-2003, 09:24
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Je kunt een eigen DTD maken met de Target Module bij de Basic Module. Ik weet alleen niet of je document dan nog valideert tegen de W3c validator.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 20:42.