Speciale characters en PHP

Pagina: 1
Acties:
  • 162 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
Ik heb 2 nagenoeg dezelfde php bestanden namelijk:

code:
1
2
één
<?php ?>


en

code:
1
2
<?php  ?>
één


Nu heb ik het vreemde probleem dat de characters éé bij het eerste script wel goed worden weergegeven en bij script nummer 2 niet. Kan iemand mij vertellen waarom script 1 het wel kan en script 2 niet?

Ik heb het dus met deze 2 php files op mijn server. Maar het heeft gevolgen voor mijn net nieuw gebouwde pagina waarbij ik de tekens éé gewoon in een database heb staan en ze er dus verbouwt als vierkantjes uitkomen. Ik denk dat bovenstaand probleem mijn probleem in een note dop is.

Ik dacht eerst dat het probleem aan mijn ftp programma lag, door verschil tussen binary en ascii uploaden maar dat maakt niks uit. Al zit er wel verschil qua grootte op de server. Het eerste script neemt 17 bytes in beslag en het tweede script neemt 12 bytes in beslag.

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Wat is de charset van beide pagina's?

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Wat gebeurt er als je het characterset handmatig instelt?

Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
De eerste pagina heeft de naam test.php en de tweede heeft de naam test2.php en dit is de enige inhoud.

Firefox zegt dat beide UTF-8 zijn al heb ik dat niet zo gedefineerd. De pagina's bevatten alleen de tekst van hierboven.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gebruik eens gewoon netjes HTML-entities?
&eacute; = é

En anders forceer je de charset met een HTTP-Header, of desnoods met een meta-tag (charset opgeven dus). Easy te googlen.

[ Voor 98% gewijzigd door RobIII op 22-10-2005 15:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
Oke, ik heb te lang zitten werken achter de computer

Ik heb nu 2 bestanden die op mijn computer 3 letters bevatten namelijk één.
Beide bestanden zien er op mijn computer normaal uit. Op het feit na dat 1 bestand 3 bytes is en het andere bestand 8 bytes. Als ik ze upload naar een server en vervolgens bekijk dan ziet het bestand van 3 bytes er niet meer uit.

http://www.vandenbroek.net/GoT/test.php
http://www.vandenbroek.net/GoT/test2.php

Ik nu even geen HTML-entities gebruiken want ik snap nu niet waarom het de ene keer wel doet en de andere keer niet. Het gaat namelijk om exact dezelfde tekst in beide bestanden.

[ Voor 17% gewijzigd door Paul_ op 22-10-2005 15:49 ]


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Het eerste bestandje is werkelijk een UTF-8 bestand, en ziet er dus goed uit.

Het tweede bestandje is een iso 8859-1 bestand, en werkt dus alleen als je je encoding ook op western european zet. De webserver geeft echter UTF-8 als encoding mee, waardoor je browser het als UTF-8 laat zien, en in UTF-8 zijn de bytecodes voor die tekens een gek tekentje.

Acties:
  • 0 Henk 'm!

  • OverSoft
  • Registratie: December 2000
  • Laatst online: 18-09 11:09
Gebruik HTML-entities, zoals het hoort.

Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
Hoe komt het dat het ene bestandje UTF-8 is en het andere bestandje ISO-8859-1?

Het ene bestand is gecopy-paste uit het andere.

Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
OverSoft schreef op zaterdag 22 oktober 2005 @ 15:50:
Gebruik HTML-entities, zoals het hoort.
Ik nu even geen HTML-entities gebruiken want ik snap nu niet waarom het de ene keer wel doet en de andere keer niet. Het gaat namelijk om exact dezelfde tekst in beide bestanden.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat snap je hier niet aan? :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
Ik snap niet waarom het ene bestand met één wel als één zichtbaar is en het andere bestand met één niet.

Ik heb nu de ISO-8859-1 meegestuurd maar het probleem blijft.

http://www.vandenbroek.net/GoT/2/test1.php
http://www.vandenbroek.net/GoT/2/test2.php

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Paul_ schreef op zaterdag 22 oktober 2005 @ 15:58:
Ik snap niet waarom het ene bestand met één wel als één zichtbaar is en het andere bestand met één niet.

Ik heb nu de ISO-8859-1 meegestuurd maar het probleem blijft.

http://www.vandenbroek.net/GoT/2/test1.php
http://www.vandenbroek.net/GoT/2/test2.php
Dus beide bestanden zijn identiek op de bestandsnaam na? Dat lijkt me ontzettend stug.
Of heb je nog steeds:
code:
1
2
één
<?php ?>

en
code:
1
2
<?php ?>
één

?
En waar stuur je die HTTP headers? Laat je code eens zien?

[ Voor 7% gewijzigd door RobIII op 22-10-2005 16:00 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
Ik heb nu

http://www.vandenbroek.net/GoT/2/utf1.php van 275 bytes
code:
1
2
3
4
5
6
7
8
9
10
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<table>
<td>één</td>
</table>
<p>
Dit is exact hetzelfde bestand als <a href="utf2.php">hier</a><br>
Alleen is de link naam en de link net iets anders. 1 is dan 2 en 2 is dan 1.

</html>



en


http://www.vandenbroek.net/GoT/2/utf2.php van 270 bytes
code:
1
2
3
4
5
6
7
8
9
10
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<table>
<td>één</td>
</table>
<p>
Dit is exact hetzelfde bestand als <a href="utf1.php">hier</a><br>
Alleen is de link naam en de link net iets anders. 1 is dan 2 en 2 is dan 1.

</html>



De beide pagina's bewerk ik met kladblok. En met kladblok op mijn PC zien ze er letterlijk zo uit. Maar als ik ze via de browser bekijk en via view source met kladblok bekijk vanaf mijn server dan zijn ze dus verschillend. Ze worden beide als binary ge-upload. (als ik ze als ascii upload gebeurt hetzelfde).

Het heeft nog weinig met php te maken. Ik dacht oorspronkelijk dat het daar aanlag. Maar mijn 2 bestanden zijn verschillend. Alleen ik snap niet hoe en waarom.

[ Voor 20% gewijzigd door Paul_ op 22-10-2005 16:07 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kijk eens naar de Codering dropdown in notepad bij het opslaan. Staan die opties hetzelfde?
Afbeeldingslocatie: http://tweakers.net/ext/f/68994/full.gif

[ Voor 25% gewijzigd door RobIII op 22-10-2005 16:10 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
RobIII schreef op zaterdag 22 oktober 2005 @ 16:07:
Kijk eens naar de Codering dropdown in notepad bij het opslaan. Staan die opties hetzelfde?
Merci, jeetje wat suf. Dat is het gewoon. Op de een of andere manier zijn sommige van mijn bestanden niet meer utf-8 maar ANSII geworden.

Waarschijnlijk omdat ik de ene keer kladblok bij mijn vriendin gebruik en de andere keer bij mij thuis...

[ Voor 14% gewijzigd door Paul_ op 22-10-2005 16:12 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Paul_ schreef op zaterdag 22 oktober 2005 @ 16:11:
Merci, jeetje wat suf. Dat is het gewoon. Op de een of andere manier zijn sommige van mijn bestanden niet meer utf-8 maar ANSII geworden.
Uit je doppen kijken heet dat :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
RobIII schreef op zaterdag 22 oktober 2005 @ 16:11:
[...]

Uit je doppen kijken heet dat :P
Ja, werk al 8 jaar met kladblok en html maar dit... 8)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

OverSoft schreef op zaterdag 22 oktober 2005 @ 15:50:
Gebruik HTML-entities, zoals het hoort.
Onzin; enkel karakters die in HTML een speciale betekenis hebben en karakters die niet voorkomen in de karakterset die je gebruikt, maar wel in HTML als entitie gedefinieerd zijn moet je als entitie opgeven.
Als je UTF8 gebruikt is het van belang dat ook je bronbestanden als UTF8 zijn opgeslagen.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Paul_ schreef op zaterdag 22 oktober 2005 @ 16:12:
[...]

Ja, werk al 8 jaar met kladblok en html maar dit... 8)
Dan wordt het ook eens tijd om van die slechte gewoonte af te stappen.

Acties:
  • 0 Henk 'm!

  • netvor
  • Registratie: September 2000
  • Laatst online: 08-04-2024
crisp schreef op zaterdag 22 oktober 2005 @ 16:13:
[...]

Onzin; enkel karakters die in HTML een speciale betekenis hebben en karakters die niet voorkomen in de karakterset die je gebruikt, maar wel in HTML als entitie gedefinieerd zijn moet je als entitie opgeven.
Als je UTF8 gebruikt is het van belang dat ook je bronbestanden als UTF8 zijn opgeslagen.
Precies, alleen speciale HTML karakters dienen omgevormd te worden. Volgens mij is dat beperkt tot deze tekens:
code:
1
2
3
4
5
<
>
"
'
&

Dingen als é of zelfs © zijn echt niet nodig om te vervangen. De reden dat ze bestaan is om het makkelijker te maken voor systemen die op ASCII werken. Maar anno 2005 wordt het echt wel eens tijd dat we overstappen op UTF-8. Ikzelf gebruik altijd:
code:
1
htmlspecialchars($data,ENT_QUOTES,'UTF-8')


Trouwens, heel veel speciale tekens uit europese talen hebben trouwens niet eens &special; equivalent. Gooi de Tsjechische tekst "Přílíš žlutoučký kůn úpěl ďábélský ódy" (deze zin bevat alle speciale tekens uit het Tsjechische alfabet) maar eens door htmlentities() en je ziet dat de helft er zo door heen valt, dus met ASCII ga je dan nog steeds de mist in.

Computer Science: describing our world with boxes and arrows.


Acties:
  • 0 Henk 'm!

Verwijderd

imp schreef op zaterdag 22 oktober 2005 @ 16:53:

Trouwens, heel veel speciale tekens uit europese talen hebben trouwens niet eens &special; equivalent. Gooi de Tsjechische tekst "Přílíš žlutoučký kůn úpěl ďábélský ódy" (deze zin bevat alle speciale tekens uit het Tsjechische alfabet) maar eens door htmlentities() en je ziet dat de helft er zo door heen valt, dus met ASCII ga je dan nog steeds de mist in.
Dat ligt aan die belachelijke functie htmlentities die veel beter alleen de numerieke character entity references had kunnen produceren.

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Waar ligt die informatie eigenlijk opgeslagen? Ik save net twee keer hetzelfde bestand met een verschillende charset (editor: kate (linux)) en de bestanden zijn even groot. Ik kan geen verschil ontdekken en toch weet kate bij heropenen precies welke codering de bestanden hebben.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

Verwijderd

Confusion schreef op zaterdag 22 oktober 2005 @ 18:19:
Waar ligt die informatie eigenlijk opgeslagen? Ik save net twee keer hetzelfde bestand met een verschillende charset (editor: kate (linux)) en de bestanden zijn even groot. Ik kan geen verschil ontdekken en toch weet kate bij heropenen precies welke codering de bestanden hebben.
Openen met een hex editor?

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Confusion schreef op zaterdag 22 oktober 2005 @ 18:19:
Waar ligt die informatie eigenlijk opgeslagen? Ik save net twee keer hetzelfde bestand met een verschillende charset (editor: kate (linux)) en de bestanden zijn even groot. Ik kan geen verschil ontdekken en toch weet kate bij heropenen precies welke codering de bestanden hebben.
Voor zover ik weet doet kate een 'educated guess'. Als je bijvoorbeeld een bestandje met alleen een normale letters opslaat, dan opent kate hem gewoon als iso 8859-1. Maar zodra je een gek teken gebruikt, dan snapt kate waarschijnlijk aan de byte die daar vanaf komt dat het in iso 8859-1 wel een héél raar teken is; itt wanneer hij het als UTF-8 interpreteert.

Zonder gekke tekens ís er immers ook geen verschil tussen UTF-8 of iso 8859-1 (gewoon de ascii code voor die letter).

Je kan eens experimenteren met de output van het 'file' commando op hele korte tekstbestandjes met en zonder speciale tekens.

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

eamelink schreef op zaterdag 22 oktober 2005 @ 19:06:
Voor zover ik weet doet kate een 'educated guess'. Als je bijvoorbeeld een bestandje met alleen een normale letters opslaat, dan opent kate hem gewoon als iso 8859-1.
Na even beter zoeken heb ik gevonden waar kate die informatie in je home directory opslaat. Zoals ik hieronder als laatste al opmerkte: in principe is er natuurlijk geen enkele reden om die info op te slaan...

Nou, mijn voorbeeld van net zijn twee bestandjes met de tekst 'test', de één gesaved als 8859-1 en de ander als utf8. Beide zijn 4 bytes en volgens de hexeditor hetzelfde. Ik kan nergens in mijn home directory of /var iets als 'recent files' vinden, waardoor kate zou kunnen weten wat het gesaved had. Maar het lijkt me ook sterk dat de gebruikte charset ergens in het bestandssysteem opgeslagen is, dus ik vermoed eigenlijk dat het aan kate ligt. In principe is er natuurlijk geen enkele reden om die info op te slaan...

[ Voor 20% gewijzigd door Confusion op 22-10-2005 20:20 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

.kde/share/apps/kate/metainfos ziet er inderdaad verdacht uit :P

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

eamelink schreef op zaterdag 22 oktober 2005 @ 20:25:
.kde/share/apps/kate/metainfos ziet er inderdaad verdacht uit :P
offtopic:
Mjah, er zat een foutje in de grep syntax waarmee ik voor mijn eerste post had gezocht :X

Wie trösten wir uns, die Mörder aller Mörder?

Pagina: 1