' freak.no - Problemer med å få til ÆØÅ i html kode
freak.no

freak.no (https://freak.no/forum/index.php)
-   Web-utvikling (https://freak.no/forum/forumdisplay.php?f=67)
-   -   Problemer med å få til ÆØÅ i html kode (https://freak.no/forum/showthread.php?t=288442)

Nikon01 28. april 2016 08:43

Problemer med å få til ÆØÅ i html kode
 
Hei folkens.

Vi utvikler et helpdesk system på jobben for øyeblikket og er snart ferdig.
Det vi nå har litt problemer med er som følger.


Vi har PHP som gir en output til fremsiden med nyhetssaker. Her har vi endret sånn at ÆØÅ vises.
Det som da skjer er at når vi gjør sånn at ÆØÅ i output her vises så vises ikke ÆØÅ i html koden i index fila.

Fjerner vi at ÆØÅ vises i php output'n så vises ÆØÅ i html koden.

Kode:

<!doctype html>
<html lang=\"no\">
<html>
    <head>
        <meta charset="utf-8">
 </head>

Her er koden vi kjører på index.php fila. Har også prøvd flere forskjellige muligheter f.eks :
Kode:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
Er det noen her som har tips å komme med?


Ha en fin dag videre.

Membranplan 28. april 2016 09:28

jeg skjønner ikke hva du lurer på. Kan du prøve å omformulere deg?

Nikon01 28. april 2016 09:50

Vi har en fil som heter publish-news.php, publish-news-form.php og list-news.php.

Publish-news.php fungerer med ÆØÅ da ÆØÅ vises i databasen, men når list-news.php skal output'e dette til index fila som har koden:
Kode:

<div class="nyheter">
                        <div class="nyhet" id="siste">
                                <?php include 'inc/list-news.php'; ?>
                        </div>

så vises ikke ÆØÅ, så da virker det som at ÆØÅ i list-news.php eller index.php mot PHP ikke fungerer.
Har nå satt sånn at vanlig ren tekst i HTML viser ÆØÅ, men php viser ikke ÆØÅ på nettsiden.

Det er her problemet ligger.

Ozma 28. april 2016 10:12

Skjønner fortsatt ikke hva du mener.

Outputen din burde se ut som dette:

Kode:

Kode:
<!doctype html>
<html lang="no">
<head>
    <meta charset="utf-8">
    <title>Hello</title>
</head>
<body>
    Whatever PHP-greier.
</body>
</html>

Hva mener du med "Her har vi endret sånn at ÆØÅ vises", og "vises ikke ÆØÅ i html koden i index fila."?

Nikon01 28. april 2016 10:27

ok.

Skal prøve å forklare IGJEN.

Index.php starter med
Kode:

<!doctype html>
<html lang="no">
<head><meta charset="utf-8"></head>

Da vises ÆØÅ på framsiden i ren tekst for HTML. Den er jo grei.

MEN, så har vi list-news.php som skal vise nyheter på framsiden.
Her vises ikke ÆØÅ, men heller svarte spørsmålstegn.

Legger jeg inn:
Kode:

header('Content-type: text/html; charset=ISO-8859-1');
i list-news.php i php tag'en så viser output'n fra nyhetssiden ÆØÅ, men da endres all ÆØÅ tekst til "egÃ¥ende".

Enten så får jeg html til å vise ÆØÅ eller php, vi får IKKE til at HTML og php viser ÆØÅ sammen.
Forklarte jeg bedre nå?

slicer 28. april 2016 10:39

Til tross for dårlig forklaring vil jeg tippe at du lagrer data som ISO-8859-1 i databasen din.

Sørg for å bruke UTF-8 overalt i kjeden, så skal alt fungere fint.

Nikon01 28. april 2016 10:56

Det er bare UTF-8 som står i filene nå, og i databasen står den også på UTF-8 og ikke ISO-8859-1. Men det fungerer ikke.

http://imgur.com/aUxMv1W

Her ser dere bilde av hvordan det ser ut nå.
"Generelle spørsmål og svar" fungerer med ÆØÅ, men som dere ser så fungerer ikke php output'n.

Provo 28. april 2016 11:24

Kan det være at noe har gått skeis med encodingen da du skrev innholdet til databasen? For eksempel at det du skrev til databasen var fra et HTML-form encodet som ISO-8859-1? Om du har oppdatert encoding til UTF-8 i noe ledd etter informasjonen du nå leser ut ble skrevet inn, så kan det være verdt et forsøk å poste informasjonen til databasen på nytt.

Nikon01 28. april 2016 11:29

Jeg legger ut en ny nyhetssak opp mot databasen etter hver endring, så det skal ikke være noe galt der.

Kode:

<?php
        include '../config.php';
        $link = mysqli_connect($servername, $username, $password, $dbname);

        if ($link === false) {
                die("ERROR: Could not connect. " . mysqli_connect_error());
        }

        $tittel = mysqli_real_escape_string($link, $_POST['tittel']);
        $undertittel = mysqli_real_escape_string($link, $_POST['undertittel']);
        $tekst = mysqli_real_escape_string($link, $_POST['tekst']);

        $sql = "INSERT INTO nyheter (tittel, undertittel, tekst) VALUES ('$tittel', '$undertittel', '$tekst')";

        if (mysqli_query($link, $sql)) {
                header("location: ../admin.php");
        } else {
                echo "ERROR: Was not able to execute $sql " . mysqli_error($link);
        }

?>

Her er php koden for å lage nyhetssaken. Den kommer rett i databasen og i databasen så vises ÆØÅ.


Kode:

<?php
header('Content-type: text/html; charset=UTF-8');

                include 'connect.php';

                mysql_query ("set character_set_results='utf8'");
                $sql = "SELECT * FROM nyheter order by `id` desc limit 2";
                $result = $conn->query($sql);

                if ($result->num_rows > 0) {
                        while ($row = $result->fetch_assoc()) {
                                echo "<h2>" . $row['tittel']                . "</h2>";
                                echo "<h3>" . $row['undertittel']        . "</h3>";
                                echo "<hr>";
                                echo "<p>"  . $row['tekst']                        . "</p>";
                                echo "<h4>Skrevet av: " . $row['forfatter']                . "</h4>";
                                echo "<br>";

                        }

                } else {
                        echo "0 results";
                }
?>

Her er list-news.php som skal vise php koden i index fila.

Alec 28. april 2016 11:46

Prøv å endre encodingen i php filen til UTF-8-BOM om du har notepad++.
Vet ikke hva den gjør, men det har løst slike problemer for meg når jeg har skrevet tekst i selve filen med æ ø å.

Nikon01 28. april 2016 11:50

Det fungerte ikke dessverre =/

Yochi 28. april 2016 13:27

Har du prøvd noe sånt som f.eks:
Kode:

echo '<pre>' . print_r($row, TRUE) . '</pre>';
i loopen din for å se hvordan innholdet er rett etter at du henter det fra databasen?

Affe 28. april 2016 13:50

Kode:

mysqli_set_charset($link ,"utf8");
Prøv å legg inn den på siden hvor du skriver ut. Har hatt samme problemet før, og den lille linja pleier å funke. :D

0xFF 28. april 2016 15:36

En løsning/hack er å replace «æ», «ø» og «å» med «&aelig;», «&oslash;», og «&aring;» før du lagrer den i databasen.

Kode:

<?php
    $replaceNorChars = array
    (
        "æ" => "&aelig;",
        "ø" => "&oslash;",
        "å" => "&aring;",
        "Æ" => "&AElig;",
        "Ø" => "&Oslash;",
        "Å" => "&Aring;"
    );

    foreach ( $replaceNorChars as $replaceKey => $replaceValue )
    {
        $inputData = str_replace ( $replaceKey, $replaceValue, $inputData );
    }

    // Lagre $inputData i database [...]
?>

Så vidt jeg vet så støtter alle nettlesere &aeling, &oslash og &aring.

Provo 28. april 2016 16:43

Sitat:

Sitat av 0xFF (Innlegg 3308694)
Kode:

<?php
    $replaceNorChars = array
    (
        "æ" => "&aelig;",
        "ø" => "&oslash;",
        "å" => "&aring;",
        "Æ" => "&AElig;",
        "Ø" => "&Oslash;",
        "Å" => "&Aring;"
    );

    foreach ( $replaceNorChars as $replaceKey => $replaceValue )
    {
        $inputData = str_replace ( $replaceKey, $replaceValue, $inputData );
    }

    // Lagre $inputData i database [...]
?>


Det er vel like greit å bruke den allerede eksisterende funksjonen "htmlentities()" som gjør om alle spesielle karakterer, inkludert hakeparentes, anførselstegn og annet som kan lage kaos i html-markupen.

Nikon01 28. april 2016 21:43

Hei folkens.

Etter en pause tenkte jeg å teste igjen.
Har nå prøvd ALLE muligheter her nå uten at det gir meg mulighet til å se Æ Ø Å i dette feltet. Får fortsatt bare svarte spørsmålstegn.

Sitat:

Sitat av Nikon01 (Innlegg 3308772)
Hei folkens.

Etter en pause tenkte jeg å teste igjen.
Har nå prøvd ALLE muligheter her nå uten at det gir meg mulighet til å se Æ Ø Å i dette feltet. Får fortsatt bare svarte spørsmålstegn.


Så ikke siste meldingen fra deg Provo.
htmlentities fungerer :)

Da er det faktisk i orden. Litt mer jobb enn jeg har gjort tidligere da jeg ALDRI har hatt problemer med ÆØÅ tidligere.

Men takk for hjelpa til alle sammen. Da kan vi presentere jobben i morgen.

uninvited 29. april 2016 12:50

Fint at du fikk løst det. :)

Hadde samme problem for en stund tilbake siden da jeg hadde en gammel database hvor tekst hadde blitt lagret i ISO-8859-1. Tror sql-serveren allikevel sendte ut tekst i UTF-8 format til PHP. Det som hjalp meg var å legge inn følgenede i "bootstrapperen":

Kode:

mysql_query("SET NAMES 'latin1'");
Du kan også sette dette permanent i sql instillingene.

CriminallyCute 7. august 2016 20:00

Jeg har hatt problemer med det samme, og fikk løst det ved å endre encodingen for filen.

Slik fikser man det i notepad++:
http://imgur.com/a/3NEMJ

vidarlo 7. august 2016 20:16

Sitat:

Sitat av Provo (Innlegg 3308703)
Det er vel like greit å bruke den allerede eksisterende funksjonen "htmlentities()" som gjør om alle spesielle karakterer, inkludert hakeparentes, anførselstegn og annet som kan lage kaos i html-markupen.

Løsninga er å sette opp alt, inkludert database og editorer til å bruke UTF-8 (eller ISO-8859-15 forsåvidt, men UTF-8 er framtida...). Slike feil er veldig klassiske, og er stortsett alltid resultat av at ein ikkje bruker rett charset gjennomført.

Her er info om korleis du set det om du bruker php+mysqli.


Alle tidspunkt er GMT +2. Klokken er nå 01:50.