🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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.
#147
Author: Eduard Bekker
Date: Sat, 12 Jun 2004 14:21
27 lines
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.
#148
Author: Daniel Tryba
Date: Sat, 12 Jun 2004 14:39
42 lines
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 &euro; of &#8364;

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.
#149
Author: Eduard Bekker
Date: Sat, 12 Jun 2004 18:22
67 lines
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("  ", "&nbsp;&nbsp;", $body_opslaan);
$body_opslaan=str_replace("\'", "'", $body_opslaan);
$body_opslaan=str_replace('\"', '"', $body_opslaan);

$body_opslaan=htmlentities($body_opslaan);
$body_opslaan=str_replace("&gt;", ">", $body_opslaan);
$body_opslaan=str_replace("&lt;", "<", $body_opslaan);
$body_opslaan=str_replace("&amp;", "&", $body_opslaan);
$body_opslaan=str_replace(chr(128), "&euro;", $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("&gt;", ">", $body);
$body=str_replace("&lt;", "<", $body);
$body=str_replace("&amp;", "&", $body);
$body=str_replace(chr(128), "&euro;", $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.
#150
Author: robert
Date: Sat, 12 Jun 2004 20:53
17 lines
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.
#151
Author: Daniel Tryba
Date: Mon, 14 Jun 2004 14:32
25 lines
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("  ", "&nbsp;&nbsp;", $body_opslaan);
> $body_opslaan=str_replace("\'", "'", $body_opslaan);
> $body_opslaan=str_replace('\"', '"', $body_opslaan);
> 
> $body_opslaan=htmlentities($body_opslaan);
> $body_opslaan=str_replace("&gt;", ">", $body_opslaan);
> $body_opslaan=str_replace("&lt;", "<", $body_opslaan);
> $body_opslaan=str_replace("&amp;", "&", $body_opslaan);
> $body_opslaan=str_replace(chr(128), "&euro;", $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