PDA

Bekijk Volledige Versie : Ophalen en bewerken HTML uit database



The Unknown
02/06/07, 04:50
Hoi allemaal,

Na'n lange tijd knoeien kom ik toch even hier om hulp vragen, voordat ik zelf een grote PHP functie aan het schrijven ben.

Het probleem is als volgt. Ik heb een stuk tekst met daarin een HTML pagina. Voorbeeld:
Blah blah blah <a href="http://www.site.com/" target="_blank">site</a>

Deze code wil ik oproepen in een textarea, zodat ik deze direct kan bewerken. Met bovenstaande tekst gaat dit nog zonder problemen. Echter als ik bijvoorbeeld een paar keer in die code </textarea></textarea></textarea> neerzet, loopt m'n hele pagina in de soep. Logisch, want wat ik tusse m'n <textarea> en </textarea> invul, is voor de browser toch niet begrijpbaar.

htmlspecialchars (een PHP functie) kan voor mij alle tekens omzetten. Echter is de HTML code die ik dan krijg niet meer werkend. Ik kan dat ook ongedaan maken op het moment van opslaan, maar dan maak ik ook HTML code ongedaan waarbij dat niet zou moeten. Voorbeeld:

meneer zegt &quot;hallo&quot; <a href=&quot;pagina.html&quot;>link</a>

Als ik dit zou opslaan, dan worden dus teveel quotes omgezet. Buiten het feit dat het gewoon heel onhandig is dat ik in het textarea niet direct meer met HTML code kan werken. Nu wil het met die " tekens meestal wel goedgaan (slimme browser?) maar zodra ik met form tags ga werken, gaat het toch echt fout.

Wat is de handigste oplossing voor dit probleem? Ik denk nu aan het gebruik maken van zo'n stukje javascript met een mooi edit-venster om tekst te wijzigen, met nog HTML opties ook. Maar voor mijn probleem zou toch ook een simpelere oplossing moeten zijn?

nielsrenselaar
02/06/07, 09:48
Tijdens het inladen de < en de > omzetten naar speciale karakters. En bij het wegschrijven in de database deze tekens weer omzetten naar normale karakters? (php.net/str_replace)

Daarnaast is het wellicht handig om tinyMCE te intergreren? die doet dat zelf voor jou, en daarnaast zie je gelijk wat je doet. TinyMCE is ook vreselijk makkelijk te intergreren. tinymce.moxiecode.com

Ramon Fincken
02/06/07, 10:29
Ik heb een test CMS voor je, wellicht dat je daarmee iets kan?
PM me even voor een voorbeeld.

Arieh
02/06/07, 11:39
Je kunt hierbij simpel de functies htmlentities() en html_entity_decode() gebruiken. Met htmlentities voor het weergeven op de pagina, en html_entity_decode voor de _POST. Weet niet zeker of het 100% gaat werken omdat het bestaande geescaped wordt, en nieuwe html die er bij komt is dan niet geescaped als je het totale pakketje in de _POST krijgt.. kunnen misschien problemen van komen maar misschien kan je er wat mee :)

The Unknown
02/06/07, 15:25
Replacen of escapen helpt me helaas niet. Misschien is tinyMCE de oplossing.

Ik wil bijvoorbeeld vanuit Dreamweaver een lading HTML kunnen copy-pasten in zo'n textarea. Maar ik wil ook bestaande code kunnen editten. Als de code dus gescaped word weergeven, dan kan ik deze niet meer plakken in dreamweaver.

Ik denk dat wat ik wil helaas niet kan. Ik heb net dat tinymce geprobeerd (heb ik weleens eerder gebruikt) maar als die data zoals </textarea></textarea></textarea> uit de database haalt, dan loopt dat, zoals verwacht, ook helemaal spaak.

M'n enige optie is: geen <form> elementen gebruiken in de database. Toch?

Arieh
02/06/07, 15:30
ik denk dat dit toch wel mogelijk moet zijn, er zijn toch zoveel cmsen waarin je html kunt gebruiken? Met escapen wordt de code trouwens niet geescaped weergegeven in de textarea, wel in de broncode.

Edit:
Heb uit nieuwschierigheid zelf even ermee lopen spelen.
Het is simpel, bestaande html uit de database laat je zien doormiddel van:
<textarea>'.htmlentities($row['blala']).'</textarea>En edit vervolgens wat je maar wilt, je drukt op submit en in de post komt gewoon netjes de html puur die je zag in de textarea. Je kan de _POST nog even door stripslashes() halen aangezien php standaard quotes escaped (is in te stellen in php.ini oid).