Archief - Vraagje ivm encoding

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

awesome

Legacy Member
De bedoeling van mijn script is om een voorbeeld te tonen van de inhoud van een textarea. Ik werk met BBCode en heb nog geen deftige WYSIWYG gevonden die dit kan behandelen in het formulier zelf. Vandaar dat ik via ajax en een 'refresh' knop de inhoud wil tonen om zo productiever te kunnen werken.

Het enige probleem is dat ik niet weet hoe ik data kan sturen als één $_POST element. Heb me rot gezocht maar niets gevonden en dus volgend script gebruikt:

Code:
var str = encodeURIComponent(document.getElementById("article").innerHTML);
var query = 'test=' + str;
var url = "/scripts/news/article_preview_handler.php";
xmlhttp.open("POST", url, true);
xmlhttp.onreadystatechange = handleStateChange;
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-Length", query.length);
xmlhttp.send(query);

Dit werkt uiteraard, maar het is vereist om de functie 'encodeURIComponent' te gebruiken, omdat anders mijn $_POST array verkloot wordt in de php-file door speciale tags als "=", "<", ...

Maar nu krijg ik in mijn php file de inhoud niet meer naar de oorspronkelijke waarde van de textarea, meer precies de \n en \r stukjes voor de nieuwe regels.

wordt dan in mijn preview venster

Het enige probleem is dus de newlines en linebreaks, waarvan de "\" precies wordt gestripped. Ik heb dit opgelost met str_replace in php en de output is kwasie hetzelfde maar uiteraard met wat bugs.


2 oplossingen zijn mogelijk:
  • Ofwel in php de string deftig decoden
  • ofwel kunnen data sturen binnen $_POST['test'] zonder "test=" + var, dus via headers ofzo. zodat ik de data niet moet encoden.
Ik heb al alles geprobeerd via php EN javascript om het goed te krijgen, maar ik vind mijn fout niet (meer met php, kennis van javascript is beperkt, hence deze topic) en zou de persoon die mij verder kan helpen erg dankbaar zijn.

grtz

EDIT: Net gemerkt dat in firefox de nieuwe regels in een textarea met \n aangeduid worden. Het is onmogelijk om elke 'n' te replacen met een '<br />'. Bah :(

adrianhates

Legacy Member
PHP: nl2br - Manual

? is dat niet wat je zoekt? :S
Verder kan je het ook gewoon zo doen ( werkt ALTIJD bij mij )

PHP:
/* 
Functie om een bericht te posten
*/
function postBericht(tekst,auteur){	
	var information = "bericht=" + encodeURIComponent(tekst)+"&auteur="+ encodeURIComponent(auteur);
	berichtObject.open("POST", "postBericht.php", true);
	berichtObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	berichtObject.send(information);
	
}

awesome

Legacy Member
Dat is exact dezelfde manier die ik gebruikt heb. New lines haalt hij er niet uit.

nl2br is één van de eerste dingen die ik geprobeerd heb, maar het probleem zit bij de \n en \r waarvan de '\' wordt weggenomen.

Hoe zit je serverside in elkaar?

grtz

Gurdt

Legacy Member
wat met decodeURIComponent() ?
edit: dan zou je terug je \n krijgen en die kan je dan wel weer omzetten naar <br /> (al dan niet handmatig, ik weet niet of er iets bestaat dat dit automatisch doet)

awesome

Legacy Member
Die decode werkt in principe, maar ik moet die decode functie toepassen op mijn ajax handler in php. Kan dus niet bij het returnen naar de pagina.

Moet het serverside doen.

adrianhates

Legacy Member
noobkillah zei:
Hoe zit je serverside in elkaar?
grtz
Mijn server side is als eender welk $_POST handle scriptje..

PHP:
<?php
// start een sessie of zet deze voort
session_start();

// zet de header naar xml
header('Content-Type: text/xml');

// haal de connect klasse 1 maal binne
require_once('classes/connect.class.php');

// haal het bericht + auteur binnen van de post
$bericht = $_POST['bericht'];
$auteur = $_POST['auteur'];

// zet de session id in een variabele
$sessionid = $_SESSION['ID'];
?>

awesome

Legacy Member
Met die server side info ben ik niet veel hé :D standaard $_POST ophalen.

Mijn probleem is eerder dit: De data die ik serverside krijg is ge-encode. Ik moet die data onmiddelijk door mij bb-parser jagen, en die parser verwacht input vanuit een formulier zonder gelijk welke encoding. Doordat de data ge-encode is krijg ik dus verkeerde output.

Deels kan ik het decoden met html_entity_decode en dergelijke functies, maar de newlines krijg ik niet zoals het hoort. Daarom ben ik op zoek naar een functie die de data onmiddelijk kan decoden naar de oorspronkelijke waardes in php.

Tx iig voor de replies!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan