PDA

Bekijk Volledige Versie : Ascii-problemen met verwerken gegevens via een formulier in php.



Eduard Bekker
12/06/04, 16:35
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
----------------------*

Daniel Tryba
12/06/04, 16:45
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 €

Pak dus het probleem bij de bron aan en verzoek de client de resultaten
in een door jou bepaald characterset te gieten.

--

Daniel Tryba

robert
12/06/04, 23:05
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