Avatar billede kodak Mester
27. september 2008 - 12:30 Der er 29 kommentarer og
1 løsning

Gem fill med anden kodning

Jeg har følgendene kode:

<?php
session_start();
if ($_SESSION["login"] == "nej")
{
header('location: login.php');
}
else
{
if(isset($_POST['test'])){
    $xml_streng = '<items>';
    $xml_streng .= '<item title="'.$_POST['1'].'" url="'.$_POST['2'].'" target="'.$_POST['3'].'" description="'.$_POST['4'].'" />';
    $xml_streng .= '</items>';
   
    $fp = fopen('side.xml', 'w');
    fwrite($fp, $xml_streng);
    fclose($fp);
}
?>
<head>
<title>Admin</title>
</head>
<form action="side.php" method="post">
<h7><b>Visning.</b></h7><br />

<h6><b>sæt 1.</b></h6>
Overskrift: <input type="text" value="Hjælp mig" name="1" />
linker til: <input type="text" value="http://www.exp.dk/" name="2" />
i: <select type="text" name="3" >
        <option value="_blank">Et nyt windue</option>
        <option value="_self">Samme Windue</option>
    </select><br />
Teksten: <textarea name="4" cols="40" rows="5">
Her skal hele teksten stå.</textarea>
<br />

<input type="submit" name="test" value="Gem" />
</form>
<?php
}
?>

Denne php gemmer filerne som "ANSI" (kodning)
Jeg vil gerne have at den gemmer dem med kodningen "Unicode"

Hvordan gør jeg det?
Avatar billede w13 Novice
27. september 2008 - 12:34 #1
Så skal du vel have meta-tag'et ind:

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

Og når du gemmer (f.eks. i Notesblok), skal du sætte Encoding til "UTF-8" også.

Derudover viser du ikke, om du har gyldig XHTML-doctype og HTML-tag.
Avatar billede kodak Mester
27. september 2008 - 12:42 #2
Hvor vil du mene at jeg skal sætte hvad ind?
Avatar billede dkfire Nybegynder
27. september 2008 - 12:56 #3
EFter at have læst et par kommentarer på http://dk.php.net/manual/en/function.fwrite.php, så fandt jeg dette:

    $fp = fopen('side.xml', 'w');
    fwrite($fp, utf8_encode($xml_streng));
    fclose($fp);

hvilket skulle presse fwrite til at gemme som utf-8.
Avatar billede w13 Novice
27. september 2008 - 12:59 #4
Sådan kan det også gøres ja, men jeg ville nu alligevel foreslå at sørge for, dine filer er korrekt UTF-8 i stedet, så du ikke behøver at encode med PHP.

Meta-tag'et:

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

skal sættes ind i din <head>-sektion, der hvor meta-tags normalt sættes. =)

Og så skal du sørge for at gemme med korrekt Encoding som beskrevet 12:34:21.
Avatar billede w13 Novice
27. september 2008 - 13:00 #5
dkfire>> Hov, troede du var kodak. =)
Men vil da stadig mene, at det er en fordel at have styr på sine siders fejlsæt.
Avatar billede dkfire Nybegynder
27. september 2008 - 13:04 #6
w13: det har du helt rigtig, at det grundlæggende er vigtigere at have styr på tegnsæt som siderne vises i. Nu læste jeg spørgsmål som problemer med fopen og fwrite. Og disse funktioner gemmer ikke i utf-8 per default, det bliver man desværre nød til at "presse" dem til. Skal dog lige siges at jeg bestemt ikke har testet noget.
Avatar billede w13 Novice
27. september 2008 - 13:11 #7
fejlsæt = tegnsæt :)
Avatar billede olebole Juniormester
27. september 2008 - 14:55 #8
<ole>

Du skal utf8_encode teksten (hvis den ikke allerede er i utf-8) og derefter sætte en header før teksten "\xEF\xBB\xBF", når du skriver til filen:
    http://dk2.php.net/manual/en/function.fwrite.php#55054

/mvh
</bole>
Avatar billede kodak Mester
27. september 2008 - 14:57 #9
Meta kan det ikke læses af googlebot ?
Er meta ikke lidt ligyldigt når det er på en adminside?
PHP filen er kun bygget til at lave externe XML filer til min flash side.
Avatar billede kodak Mester
27. september 2008 - 14:58 #10
dkfire>>
fwrite($fp, utf8_encode($xml_streng));
virkede unen problemer tak for det.
Avatar billede w13 Novice
27. september 2008 - 15:09 #11
Meta-data kan bruges til mange ting. Bl.a. læser søgemaskiner (såsom Googlebot) dine meta-data.

Men for at bruge et bestemt tegnsæt på sin side kræves det også, at du sætter det i et meta-tag, ligesom jeg har vist. Også selvom det kun er en adminside.
Avatar billede olebole Juniormester
27. september 2008 - 15:26 #12
Denne fil har jeg lige testet, og den opretter et utf-8 encoded dokument:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>

<?php
$fp = fopen("test.txt", "w");
fwrite($fp, "Øl, ål og røreæg");
fclose($fp)
?>

</body>
</html>

HTML-dokumentet er naturligvis gemt som utf-8. Sværere er det ikke  =)

PS: eksemplet med headeren, jeg viste (27/09-2008 14:55:32), gemmer som utf-8 _med_ BOM, hvilket dog sjældent er ønskeligt.
Avatar billede kodak Mester
27. september 2008 - 15:34 #13
Jeg takker for hjælpen
Må jeg få et svar?
Avatar billede dkfire Nybegynder
27. september 2008 - 16:47 #14
Det kan du tro du må ;-)
Avatar billede kjeldsted Novice
27. september 2008 - 20:38 #15
Hvis jeg lige må bryde ind i en ellers afsluttet sag, med et spørgsmål.

Jeg har selv en side hvori der bliver gemt en XML fil. Åbner man denne fil i notesblok vil tegnsættet stå til UTF-8. Jeg ønsker derimod at det i stedet skal stå, til det som i notesblok kaldes for 'Unicode'? Nogle der ved hvordan det kan gøres?

Jeg kan lige til bonus sige at hvis man fx har en fil der er gemt i notesblok som UTF-8 vil fylde fx 20 kb, hvor den med 'Unicode' vil fylde 40 kb.
Avatar billede olebole Juniormester
27. september 2008 - 21:06 #16
PHP understøtter ikke umiddelbart utf-16, så du skal ud i at lave en special klasse
Avatar billede olebole Juniormester
27. september 2008 - 21:19 #17
- men hvad vil du forøvrigt bruge utf-16 til? På WWW bør du ikke bruge utf-16
Avatar billede kjeldsted Novice
27. september 2008 - 22:52 #18
Problemet er at filen skal kunne læses af et PC program til afvikling af TV indslag. Og det er en smule irriterende at man skal ind og ændre alle playlists i notesblok for at de virker. Spild af tid faktisk.

Men ved du hvordan jeg så umiddelbart vil kunne ændre det?
Avatar billede olebole Juniormester
27. september 2008 - 23:18 #19
Så skal du have fat i:
    http://dk.php.net/manual/en/function.mb-convert-encoding.php

- hvis din server altså har den extension installeret.

Ellers kan du kikke på dette JSON-library, som nu er en del af Pear. Led efter funktionen 'utf82utf16' - ca. 1/4 nede på siden. Prøv, om det vil lykkes for dig - og meld meget gerne tilbage, så vi andre kan blive klogere. Det vil kodak sikkert også sætte pris på, selvom vi har hijacket hans tråd lidt  ;o)
Avatar billede olebole Juniormester
27. september 2008 - 23:19 #20
Ups ... URL'en  :D
    http://mike.teczno.com/JSON/JSON.phps
Avatar billede olebole Juniormester
27. september 2008 - 23:24 #21
NB: utf82utf16 tager kun ét tegn ad gangen, så du skal loope dig gennem strengen
Avatar billede kjeldsted Novice
27. september 2008 - 23:32 #22
Hm. Nu begyner tingene da at gå galt. Af en mystisk grund får jeg nu fejlen

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /customers/runja.dk/runja.dk/httpd.www/xml_export.php:1) in /customers/runja.dk/runja.dk/httpd.www/xml_export.php on line 2

. Linje 1-4 ser således ud:

<?
session_start();
$indhold['start'] =
"<?xml version=\"1.0\" encoding=\"UTF-16\"?>\r

Hvordan pokker kan linje 1 udskrive noget der forhindre min session_start() funktion?
Avatar billede olebole Juniormester
27. september 2008 - 23:38 #23
Der står noget før <?
Avatar billede olebole Juniormester
27. september 2008 - 23:40 #24
Hvordan gemmer du filen 'xml_export.php' - og i hvad? Er filen inkluderet i noget andet?
Avatar billede olebole Juniormester
27. september 2008 - 23:42 #25
Hvis du gemmer filen som utf-8 i Notesblok, indsættes tre usynlige tegn, kaldet BOM. De kan give problemer med headers - specielt ved includes. Gem i Notepad++ eller DreamWeaver ... eller sikkert en masse andre, men de to, ved jeg, kan gemme uden BOM  ;o)
Avatar billede kjeldsted Novice
27. september 2008 - 23:44 #26
Nej. Der står netop ikke noget før <?. Det er det der undre mig.

xml_export.php er den fil der via sessions generer en XML fil ud fra en playlist. Man er på en side hvor en playlis vises i en tabel, her er der et link til xml_export.php der ganske enkelt bare downloader xml filen.
Avatar billede kjeldsted Novice
27. september 2008 - 23:46 #27
Hm. Nu går det helt galt på xml_export.php filen. Fortsætter lige med en test fil for at få UTF-16 funktionen til at virke.
Avatar billede kjeldsted Novice
27. september 2008 - 23:50 #28
Hvis jeg laver en fil indeholdende:

<?php
$fullpath =
"<?xml version=\"1.0\" encoding=\"UTF-16\"?>\r
<PlayList>\r
    <ExportedBy>Vector3</ExportedBy>\r
    <StudioId>0</StudioId>\r
    <Id>0</Id>\r
    <ListDuration>00:01:32:12</ListDuration>\r
    <CatalogueDir>\\Catalogue</CatalogueDir>\r
    <StorageUnits>\r
        <UnitPath>D:</UnitPath>\r
    </StorageUnits>\r
</PlayList>\r
";
$filename = 'test.XML';
$fullpath = mb_convert_encoding($fullpath, "UTF-16");
header('Content-type: text/xml');
header('Content-Disposition: attachment; filename="'.$filename.'"');
readfile($fullpath);
?>

Får jeg en helt tom XML fil (0 bytes). Er det logisk?
Avatar billede w13 Novice
28. september 2008 - 12:30 #29
Kjeldsted>> Når BOM består i 3 usynlige tegn, vil du selvfølgelig ikke kunne se, at de er der. =) Men det er de, når man gemmer som UTF-8 i Notesblok.
Avatar billede kjeldsted Novice
28. september 2008 - 15:22 #30
Ja. Den fangede jeg godt. Ved godt at usynlige ting ikke kan ses ;)

Den drillede bare en "lille smule" i går da det ikke hjalp at gemme den i Dreamweaver. Men nu virker det vist igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester