[PHP] Bestand wegschrijven als UTF-8 (bestandsnaam)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goede avond, ik wil html bestanden opslaan met als naam de letters in taal, bijv. russisch, chinees, arabisch etc. Echter loop ik tegen een aantal dingen aan:

Als ik lokaal een bestand welkom.html aanmaak met een russische naam, dus: Добропожаловать.html, en dit vevolgens open in mijn browser dan staat daar C:\Добропожаловать.html, nu wil dit via PHP doen met een script dat bestanden wegschrijft, echter krijg ik dan hele andere resultaten.
$Naam = "Добропожаловать";
PHP:
1
2
3
4
    $Bestand = fopen("./".$Naam.".html", "w+"); 
        
    fwrite ($Bestand, $Naam.".html, "."htm_tekst");
    fclose ($Bestand);

Dit is het resultaat:

Добропожаловать.html
en
Добропожаловать.html

Echter snap ik niet waarom het lokaal op Windows wel werkt, en online niet, ik kan lokaal zelfs het bestand zo openen:
C:\results\Добропожаловать.html
http://results/Добропожаловать.html,

Op Wikipedia bijvoorbeeld wordt de Naam heen urlencode en terug urldecode. Echter als ik de russische versie bezoek, krijg ik geen russische tekens te zien, alleen de urlenode string.

Nu ik heb lokaal de laatste versie van PHP, en ik draai Vista Ult. met o.a. russisch taal pakket. Ook is de gehele server lokaal afgestemd op UTF-8, het wegschrijven van html in utf-8 werkt overigs prima.

Maar hoe kan ik ervoor zorgen dat als ik een bestand een naam geef, deze ook zo wordt overgenomen en dat het bestand ook daadwerkelijk zo genoemd wordt? 8)7 Mvg Ryan

Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 17-09 16:09

NetForce1

(inspiratie == 0) -> true

Draait je PHP-script online op een linux-machine? Dan moet je er nl voor zorgen dat de systeem-encoding ook UTF-8 is, of de naam converteren naar de huidige systeem-encoding bij het wegschrijven. Uiteraard dan bij het inlezen weer terug converteren naar UTF-8.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NetForce1 schreef op vrijdag 28 augustus 2009 @ 23:43:
Draait je PHP-script online op een linux-machine? Dan moet je er nl voor zorgen dat de systeem-encoding ook UTF-8 is, of de naam converteren naar de huidige systeem-encoding bij het wegschrijven. Uiteraard dan bij het inlezen weer terug converteren naar UTF-8.
Ja ik draai online een server met Linux, lokaal Windows maar in beide gevallen hetzelfde. Maar je zegt systeem-encoding dat zou in windows dan juist moeten zijn, of moet ik dan in apache/php ergens nog instellen denkje? _/-\o_

[ Voor 12% gewijzigd door Verwijderd op 28-08-2009 23:49 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:57

MueR

Admin Tweakers Discord

is niet lief

Als je deze bestanden publiek beschikbaar wil maken, zul je het toch moeten converteren naar "standaard" letters.
Thus, only alphanumerics, the special characters "$-_.+!*'(),", and reserved characters used for their reserved purposes may be used unencoded within a URL.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • gwystyl
  • Registratie: Juni 2001
  • Laatst online: 18-09 11:41

gwystyl

Beugeltje dan maar?

Kan je niet gewone letters gebruiken? Ik weet dat het niet je vraag is, maar ik zie ook bij russische sites dat de url's gewoon in leesbare letters zijn. Dat zorgt ervoor dat ik soms linkjes als forum of download wel vinden :)

Acties:
  • 0 Henk 'm!

  • thegve
  • Registratie: Februari 2004
  • Laatst online: 17-09 08:23
http://nl.php.net/manual/en/function.iconv.php

En dan dus iets als

code:
1
fwrite($Bestand,iconv("UTF-8", "ISO-8859-1//TRANSLIT", 'blieb'),'tekst');


instant update:
Hey, das gek. Ik vergeet met mn duffe kop mijn eigen iconv ding erin te zetten, en je code voorbeeld werkt hier gewoon meteen op mijn Debian 5 laptop met php5.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gwystyl schreef op vrijdag 28 augustus 2009 @ 23:50:
Kan je niet gewone letters gebruiken? Ik weet dat het niet je vraag is, maar ik zie ook bij russische sites dat de url's gewoon in leesbare letters zijn. Dat zorgt ervoor dat ik soms linkjes als forum of download wel vinden :)
Ja dat was in de eerste instantie mijn idee, ik ging toen ook speciale karakters replace met A to Z, maar dan houd je bij chinees en russisch een lege naam over. Dus nu wil dit veranderen...

Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 17-09 16:09

NetForce1

(inspiratie == 0) -> true

Wat is de uitvoer van het commando 'locale' op de linux-bak? Aan de hand daarvan moet je bepalen naar welke encoding je moet converteren.
.edit:
Leesvoer: http://www.cl.cam.ac.uk/~mgk25/unicode.html

[ Voor 18% gewijzigd door NetForce1 op 29-08-2009 00:08 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thegve schreef op vrijdag 28 augustus 2009 @ 23:52:
http://nl.php.net/manual/en/function.iconv.php

En dan dus iets als

code:
1
fwrite($Bestand,iconv("UTF-8", "ISO-8859-1//TRANSLIT", 'blieb'),'tekst');


instant update:
Hey, das gek. Ik vergeet met mn duffe kop mijn eigen iconv ding erin te zetten, en je code voorbeeld werkt hier gewoon meteen op mijn Debian 5 laptop met php5.
Dat is zeker gek met je duffe kop...? Bij werkt het namelijk niet, ik krijg nog steeds hetzelfde resultaat jammer genoeg, zowel in PHP 5.2 op Windows als op Linux. Ik vraag mij af of het mischien een instelling is die ik moet instellen hiervoor? :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NetForce1 schreef op zaterdag 29 augustus 2009 @ 00:07:
Wat is de uitvoer van het commando 'locale' op de linux-bak? Aan de hand daarvan moet je bepalen naar welke encoding je moet converteren.
.edit:
Leesvoer: http://www.cl.cam.ac.uk/~mgk25/unicode.html
***@***:~$ locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
***@***:~$
***@***:~$

Ik ga het even lezen :)

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Verwijderd schreef op zaterdag 29 augustus 2009 @ 00:07:
[...]

Ja dat was in de eerste instantie mijn idee, ik ging toen ook speciale karakters replace met A to Z, maar dan houd je bij chinees en russisch een lege naam over. Dus nu wil dit veranderen...
Wellicht dat je een alias kan maken voor elke file die enkel toegestane tekens voor een URL bevat. Het is vrij lastig om dit voor alle talen automatisch te generen (je zou het dan door een vertaalmachine heen moeten halen voor Russich, Chinees etc.).

Deze alias kan je bijvoorbeeld in een (mysql) database opslaan.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 18-09 11:40
Verwijderd schreef op zaterdag 29 augustus 2009 @ 00:17:
***@***:~$ locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
:? Dat hoort zoiets te zijn:
$ locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=
offtopic:
Ja, ik geef de voorkeur aan Brits Engels

[ Voor 3% gewijzigd door gertvdijk op 29-08-2009 16:43 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.

Pagina: 1