Avatar billede Six Nybegynder
09. august 2009 - 01:27 Der er 9 kommentarer og
1 løsning

Fil skal konverteres til UTF-8 på serveren

Hej eksperter.

Hvordan omdanner jeg indholdet, fra en eksisterende fil på serveren til UTF8 ?

Jeg har et uploadscript, hvor den tager imod alle encodings, men når filen er uploaded vil jeg gerne have den omdannet til UTF8.

Jeg kan bare ikke lige greje helt hvordan jeg skal gøre det.
Avatar billede Six Nybegynder
09. august 2009 - 01:34 #1
Jeg har lavet denne funktion:

[code]
function convert_utf8($filename) {
$file_content = fopen($filename, "r");
utf8_encode($file_content);

$fp = fopen($filename, 'w');
fwrite($fp, $file_content);
fclose($fp);
}
[/code]
Men det er lidt som om at det ikke helt virker som det skal ;)
Avatar billede Six Nybegynder
09. august 2009 - 01:35 #2
function convert_utf8($filename) {
$file_content = fopen($filename, "r");
utf8_encode($file_content);

$fp = fopen($filename, 'w');
fwrite($fp, $file_content);
fclose($fp);
}
Avatar billede Slettet bruger
09. august 2009 - 02:36 #3
Funktionen "utf8_encode()" returnerer en streng, den omdanner ikke din variabel, så derfor sker der intet med $file_content.
Så jeg ville gøre noget ala det her:

function convert_utf8($filename) {
$file_content = fopen($filename, "r");
$file_content = utf8_encode($file_content);

$fp = fopen($filename, 'w');
fwrite($fp, $file_content);
fclose($fp);
}

Håber det ordner dit problem.
Avatar billede Slettet bruger
09. august 2009 - 02:37 #4
Hov jeg c/p'ede den forkerte kode, men det skulle vidst stadig være til at forstå!
Avatar billede Six Nybegynder
09. august 2009 - 03:26 #5
Det løste problemet - det var vidst lige en misser ;)

Mit slutresultat er blevet:

//fundet på http://dk.php.net/manual/en/function.mb-detect-encoding.php i kommentarerne.
function is_utf8($str) {
    $c=0; $b=0;
    $bits=0;
    $len=strlen($str);
    for($i=0; $i<$len; $i++){
        $c=ord($str[$i]);
        if($c > 128){
            if(($c >= 254)) return "false";
            elseif($c >= 252) $bits=6;
            elseif($c >= 248) $bits=5;
            elseif($c >= 240) $bits=4;
            elseif($c >= 224) $bits=3;
            elseif($c >= 192) $bits=2;
            else return "false";
            if(($i+$bits) > $len) return "false";
            while($bits > 1){
                $i++;
                $b=ord($str[$i]);
                if($b < 128 || $b > 191) return "false";
                $bits--;
            }
        }
    }
    return "true";
}
function convert_utf8($filename) {
    $fh = fopen($filename, "r");
    $file_content = fread($fh, filesize($filename));
    echo is_utf8($file_content);
    if (is_utf8($file_content) == "false") {
        $file_content = utf8_encode($file_content);
    }
    $fp = fopen($filename, 'w');
    fwrite($fp, $file_content);
    fclose($fp);
}

Så tjekker den lige om den er utf8 i forvejen, ellers kører den utf8_encode
Avatar billede Six Nybegynder
09. august 2009 - 03:27 #6
Smider du lige et svar roxki - så er alt godt :)
Avatar billede Six Nybegynder
09. august 2009 - 03:29 #7
function convert_utf8($filename) {
    $fh = fopen($filename, "r");
    $file_content = fread($fh, filesize($filename));
    echo is_utf8($file_content);
    if (is_utf8($file_content) == "false") {
        $file_content = utf8_encode($file_content);
    }
    $fp = fopen($filename, 'w');
    fwrite($fp, $file_content);
    fclose($fp);
}

    echo is_utf8($file_content);
er selvfølgelig ikke med i den endelige udgave, det var debugging :D
Avatar billede Slettet bruger
09. august 2009 - 03:30 #8
svar her
Avatar billede Six Nybegynder
09. august 2009 - 03:32 #9
Her er den HELT endelige funktion, jeg overså lige et par ting tydeligvis :P

function convert_utf8($filename) {
    $fh = fopen($filename, "r");
    $file_content = fread($fh, filesize($filename));
    fclose($fh);
    if (is_utf8($file_content) == "false") {
        $file_content = utf8_encode($file_content);
    }
    $fp = fopen($filename, 'w');
    fwrite($fp, $file_content);
    fclose($fp);
}
Avatar billede oleoldhoj Nybegynder
25. juli 2010 - 01:59 #10
hvis man er lidt doven og har lyst til at gøre det på fil nivau kan det gøres således

#!/bin/bash
echo ""

echo "cd .."
cd ..

mkdir log
chmod 777 log
echo "" > log/convertIso2utf8.sh.convert.log
echo "" > log/convertIso2utf8.sh.notHandled.log
echo "" > log/convertIso2utf8.sh.nothingDone.log
echo "" > log/dos2unix.log

echo "Starting"

# find all relavant files
for i in `find . \( -name "*.htm" -o -name "*.html" -o -name "*.php" -o -name "*.js" -o -name "*.css" \)`
do
# removes any windows signs
echo `file -i $i` >> log/dos2unix.log

if [[ `file -i $i | grep text` =~ "charset=us-ascii" ]]
  then
  echo "  us-ascii    :" - `file -i $i`
  echo `file -i $i` >> log/convertIso2utf8.sh.notHandled.log
        else

        if [[ `file $i -i | grep text` =~ "charset=utf-8" ]]
  then
          echo "  UTF8        :" - `file -i $i`
    echo `file -i $i` >> log/convertIso2utf8.sh.notHandled.log
        else

if [[ `file -i $i | grep empty` =~ "application/x-empty" ]]
  then
  echo "  empty      :" - `file -i $i`
  echo `file -i $i` >> log/convertIso2utf8.sh.notHandled.log
        else

if [[ `file -i $i | grep text` =~ "text/html" ]]
  then
  echo "  text/html  :" - `file -i $i`
  echo `file -i $i` >> log/convertIso2utf8.sh.notHandled.log
        else

if [[ `file -i $i | grep text` =~ "text/xml" ]]
  then
  echo "  text/xml    :" - `file -i $i`
  echo `file -i $i` >> log/convertIso2utf8.sh.notHandled.log
        else

if [[ `file -i $i | grep text` =~ "charset=iso-8859-1" ]]
  then
  echo "+ Converting  :" - `file -i $i`
  cat $i | iconv -f iso-8859-1 -t utf-8 > $i.tmp
  mv $i.tmp $i
  echo `file -i $i` >> log/convertIso2utf8.sh.convert.log

        else
    echo "- Not registed :" - `file -i $i`
    echo `file -i $i` >> log/convertIso2utf8.sh.nothingDone.log
        fi
        fi
        fi
  fi
  fi
  fi
done

echo "Done"
echo "Please *.log"
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