Thread View: nl.internet.www.server-side
5 messages
5 total messages
Started by Eduard Bekker
Sat, 12 Jun 2004 14:21
Ascii-problemen met verwerken gegevens via een formulier in php.
Author: Eduard Bekker
Date: Sat, 12 Jun 2004 14:21
Date: Sat, 12 Jun 2004 14:21
27 lines
1950 bytes
1950 bytes
Beste mensen! Ik heb gemerkt dat er problemen zijn, als je via een formulier tekstinfo wegschrijft voor een html-bestand via php-scripting. Het probleem ontstaat door verschillen tussen Mac en Pc in ascii-waarden van karakters boven de ascii-waarde 126. Zolang je een formulier achter een pc invult, gaat het nog redelijk goed (alleen Safari pakt vertaalt botweg de MAC-betekenis van een extended karakter en geeft het dus verkeerd weer). Maar zodra je het via de Mac doet, pakt de PC het niet goed op. Bovendien: een extended karakter in een html-string is niet correct. Mijn vraag is dus: hoe kan ik zorgen dat een string die via POST van een tekst-area in een formulier komt, op de juiste wijze (dus met &#xxx;) wordt weggeschreven naar een bestand? Bij voorbaat dank! -- ----------------------* Met vriendelijke groeten, Eduard Bekker http://www.websitez.nl ----------------------*
Re: Ascii-problemen met verwerken gegevens via een formulier in php.
Author: Daniel Tryba
Date: Sat, 12 Jun 2004 14:39
Date: Sat, 12 Jun 2004 14:39
42 lines
2887 bytes
2887 bytes
In nl.internet.www.server-side Eduard Bekker <e.bekker@layout.nl> wrote: > Ik heb gemerkt dat er problemen zijn, als je via een formulier tekstinfo > wegschrijft voor een html-bestand via php-scripting. > Het probleem ontstaat door verschillen tussen Mac en Pc in ascii-waarden van > karakters boven de ascii-waarde 126. Dat is helemaal geen ascii. ASCII is gedefineerd voor de decimale waarden 0 t/m 127. > Zolang je een formulier achter een pc invult, gaat het nog redelijk > goed (alleen Safari pakt vertaalt botweg de MAC-betekenis van een > extended karakter en geeft het dus verkeerd weer). Maar zodra je het > via de Mac doet, pakt de PC het niet goed op. Je laat schijnbaar de client vrij in de keuze om een chracterset/encoding te kiezen? > Bovendien: een extended karakter in een html-string is niet correct. Huh? > Mijn vraag is dus: hoe kan ik zorgen dat een string die via POST van > een tekst-area in een formulier komt, op de juiste wijze (dus met > &#xxx;) wordt weggeschreven naar een bestand? IMHO is dit symptoombestreiding. Maar zie http://nl2.php.net/manual/en/function.htmlentities.php (en volgende) en merk op dat ook hier gebruikt dient te worden gemaakt van een characterset argument om de correcte vertaling van door de client gestuurde waarden naar het correcte character in unicode. Als voorbeeld zou je kunnen kijken naar 2 machines waarvan de ene iso-8859-15 doet en de andere cp1252. Als de user ergens een euro symbool heeft ingetikt zal dat in het eerste geval de waarde 164 zijn en in het 2de 128 IIRC. Die moet dus worden vertaalt naar € of € Pak dus het probleem bij de bron aan en verzoek de client de resultaten in een door jou bepaald characterset te gieten. -- Daniel Tryba
Re: Ascii-problemen met verwerken gegevens via een formulier in php.
Author: Eduard Bekker
Date: Sat, 12 Jun 2004 18:22
Date: Sat, 12 Jun 2004 18:22
67 lines
3415 bytes
3415 bytes
On 12-06-2004 16:39, in article caf4ji$hso$1@news.tue.nl, "Daniel Tryba"
<news_nl.internet.www.server-side@canopus.nl> wrote:
> Pak dus het probleem bij de bron aan en verzoek de client de resultaten
> in een door jou bepaald characterset te gieten.
Je kunt nogal moeilijk vragen om aan iedereen die je gastenboek invult de
resultaten in een door mij bepaalde characterset te gieten.
<http://nl2.php.net/manual/en/function.htmlentities.php>
De aanwijzingen opvolgend kom ik tot het volgende:
Voor het opvangen en opslaan van de verstuurde gegevens:
$body_opslaan=$_POST['body_opslaan'];
$body_opslaan=str_replace(" ", " ", $body_opslaan);
$body_opslaan=str_replace("\'", "'", $body_opslaan);
$body_opslaan=str_replace('\"', '"', $body_opslaan);
$body_opslaan=htmlentities($body_opslaan);
$body_opslaan=str_replace(">", ">", $body_opslaan);
$body_opslaan=str_replace("<", "<", $body_opslaan);
$body_opslaan=str_replace("&", "&", $body_opslaan);
$body_opslaan=str_replace(chr(128), "€", $body_opslaan);
if ($body_opslaan)
{
$fp = fopen("body.txt", "w");
fputs($fp, $body_opslaan);
fclose($fp);
}
En voor het versturen per formulier:
$body=join("", file("body.txt"));
$body = preg_replace("/(\015\012)|(\015)|(\012)/","\n",$body);
$body=htmlentities($body);
$body=str_replace(">", ">", $body);
$body=str_replace("<", "<", $body);
$body=str_replace("&", "&", $body);
$body=str_replace(chr(128), "€", $body);
echo "<FORM action='_boot.php' method='POST'>\n";
echo "<input TYPE='hidden' NAME='editor' VALUE='true'>\n";
echo "<TEXTAREA class='wit' NAME='body_opslaan' COLS='45'
ROWS='30'>".$body."</TEXTAREA><BR>\n";
echo "<input class='input10' TYPE='submit' VALUE='Opslaan'>";
echo "</FORM>\n\n";
De problemen worden hiermee echter niet opgelost.
Op de Mac werkt het goed, maar onder Windows niet: IE op WindowsXP geeft bij
opstart de goede HTML, maar na ��n keer versturen, klopt er niets meer van
de ASCIIcodes >127.
(ik noem dat ook ASCII-codes, maar blijkbaar heet dat dus anders).
Het vreemde is dat Explorer het nog wel goed weergeeft, maar dat er van de
source niets meer klopt.
--
----------------------*
Met vriendelijke groeten,
Eduard Bekker
http://www.websitez.nl
----------------------*
Re: Ascii-problemen met verwerken gegevens via een formulier in php.
Author: robert
Date: Sat, 12 Jun 2004 20:53
Date: Sat, 12 Jun 2004 20:53
17 lines
1802 bytes
1802 bytes
Eduard Bekker <e.bekker@layout.nl>:
> On 12-06-2004 16:39, in article caf4ji$hso$1@news.tue.nl, "Daniel Tryba"
> <news_nl.internet.www.server-side@canopus.nl> wrote:
>
>> Pak dus het probleem bij de bron aan en verzoek de client de resultaten
>> in een door jou bepaald characterset te gieten.
>
> Je kunt nogal moeilijk vragen om aan iedereen die je gastenboek invult
> de resultaten in een door mij bepaalde characterset te gieten.
http://www.w3.org/TR/html401/interact/forms.html#adef-accept-charset
Als je een goedondersteunde charset gebruikt (UTF-8, ISO-Latin-1 of
ISO-Latin-9), dan is de kans groot dat dat overal werkt.
--
robert
Re: Ascii-problemen met verwerken gegevens via een formulier in php.
Author: Daniel Tryba
Date: Mon, 14 Jun 2004 14:32
Date: Mon, 14 Jun 2004 14:32
25 lines
2194 bytes
2194 bytes
In nl.internet.www.server-side Eduard Bekker <e.bekker@layout.nl> wrote:
> Voor het opvangen en opslaan van de verstuurde gegevens:
>
> $body_opslaan=$_POST['body_opslaan'];
> $body_opslaan=str_replace(" ", " ", $body_opslaan);
> $body_opslaan=str_replace("\'", "'", $body_opslaan);
> $body_opslaan=str_replace('\"', '"', $body_opslaan);
>
> $body_opslaan=htmlentities($body_opslaan);
> $body_opslaan=str_replace(">", ">", $body_opslaan);
> $body_opslaan=str_replace("<", "<", $body_opslaan);
> $body_opslaan=str_replace("&", "&", $body_opslaan);
> $body_opslaan=str_replace(chr(128), "€", $body_opslaan);
Ehhh, als je deze body nog ooit weer weergeeft aan een browser dan ligt
je script dus open voor XSS.
BTW ipv 7 maal str_replace aan te roepen kan dat ook in 1 keer door als
1ste en 2de arg een array mee te geven.
FUP gewijzigt...
--
Daniel Tryba
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads