Hei,
Teinpäs tässä tälläistä "Pm-systemiä", eli yksityisviesti koodia.
Aina tuppaa vaan ääkköset menemään.
Indexsissä toimii ääkköset UFT-8:na, mutta muualla ei, muut sivut toimivat ISO-8859-1 koodauksella.
Jos haet kannasta tietoa niin kanta pitää olla myös utf-8. Samoin kun tallennat tiedostot (esim .php), niin editorin asetuksissa pitää olla, että tallennetaan utf8, jotta toimis.
TeNDoLLA kirjoitti:
Jos haet kannasta tietoa niin kanta pitää olla myös utf-8.
Ihanaa tekstiä korvilleni, ja varsinkin koodini ääkkösille :) Kiitos paljon!
PS. Editorini, Notepad++, tallensi sen ennen ANSI-koodauksella. Mikä tämä on?
Tähän samaan voisin kysyä vielä juuri tulleesta ongelmasta liittyen session_start() -funktioon. Tiedän, että tästä on paljon käyty keskustelua, ja vastauskin on se, että errori tulee jos on tulostettu jotakin ennen tätä, mutta kun minulla ei ole mitään tulostettu!
Check.php tiedostossa lukee ensimmäisellä rivillä "<?php session_start();"
Tätä ennen EI ole tulostettu mitään. Ensimmäisessä tiedostossa on tälläinen sisältö:
//Check.php
<?php session_start(); include("settings.php"); if(isset($_POST["tunnus"]) && isset($_POST["salasana"])) { $t = $_POST["tunnus"]; $s = $_POST["salasana"]; $haku = mysql_query("SELECT * FROM users WHERE tunnus = '$t' AND salasana = '$s'") or die(mysql_error()); $istunto = md5(uniqid("")); mysql_query("UPDATE users SET istunto = '$istunto' WHERE tunnus = '$t' AND salasana = '$s'") or die(mysql_error()); if(mysql_num_rows($haku) == 1) { $_SESSION["logkey"] = $istunto; header("Location: index.php"); } else echo "Tunnus tai salasana oli väärin"; } if(isset($_GET["logout"])) { unset($_SESSION["logkey"]); session_destroy(); header("Location: index.php"); } if(isset($_SESSION["logkey"])) { $kysely = mysql_query("SELECT * FROM users WHERE istunto = '".mysql_real_escape_string($_SESSION["logkey"])."'"); if(mysql_num_rows($kysely) == 1) { $user = mysql_fetch_array($kysely); } } ?>
//index.php
<?php include("check.php"); if ($user) { ?> <html> <head> <title>Private Message System</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <table style="border: 1px solid black" width="100%" align="center"> <tr> <td> <h1>Private Message System</h1> </td> </tr> </table><br> <div style="float: left"> <table style="border: 1px solid black" width="20%" align="center"> <tr> <td>PM-System</td> </tr> <tr> <td> <li><a href="index.php?sivu=etusivu">Etusivu</a><br> <li><a href="index.php?sivu=pm">Viestit</a><br> <li><a href="index.php?sivu=lahetaviesti">Lähetä viesti</a><br><br> </td> </tr> </table> </div> <div style="float: right"> <table style="border: 1px solid black" width="100%" align="center"> <tr> <td><?php if(!isset($_GET["sivu"])) { $sivu = "etusivu"; } else { $sivu = $_GET["sivu"]; } if(!file_exists($sivu . ".php")) { echo "Sivua ei löytynyt"; } include($sivu . ".php"); ?></td> </tr> </table> </div> </body> </html> <?php } else echo "<form action=\"check.php\" method=\"post\">\n<b>Tunnus:</b><br>\n<input type=\"name\" name=\"tunnus\" size=\"25\"><br><br>\n<b>Salasana:</b><br><input type=\"password\" name=\"salasana\" size=\"25\">\n<br><br><input type=\"submit\" value=\"Kirjaudu\"></form>"; ?>
Ja sitten on noita etusivu.php:tä sun muita missä on pelkkää tekstiä.
En ole ikinä törmännyt tälläiseen ongelmaan.
Tämä ongelma sai alkunsa, kun korjasin tiedoston koodauksen UTF-8:ksi ANSIsta.
MIB: Luepa tästä.
Kiitos :)
Tässä vielä sellainen juttu liittyen tuohon ääkkösiin, että onko mahdollista utf8 encoodata kokonainen sivu? Kun utf8_encode() -funktiolla saa muuttujien sisältöjä encodattua, niin mitenkäs onnistuu kokonaisen sivun?
Blaze on kirjoittanut koodinvinkin tästä aiheesta, mutta sivuni eivät entuudestaan ole tätä ISO-5589-1 koodausta nähnytkään.
Puskuroi tuloste ja enkoodaa sitten ja tulosta uudelleen.
Lebe80 kirjoitti:
Puskuroi tuloste --
Nyt en tainnut ymmärtää, mitä tarkoitit. Voisitko selventää?
Tällä ja muutamalla muulla siihen linkatulla funktiolla voi tulostuksen kerätä tekstimuuttujaan (echo ei tulostakaan suoraan), käsitellä ja sitten vasta tulostaa:
https://www.php.net/manual/en/function.ob-start.php
Okei kiitos. Vielä yksi juttu, sitten jätän teidät rauhaan:
Kun otan viestin textareasta formin lähetäessä, niin ääkköset ovat muuttujassa ihan oikein, mutta kun ne kirjoitetaan kantaan, menevät ne ihan päin puuta.
Sivu on UTF-8 koodattu ilman BOMia. Ennen UTF-8 koodaukseksi muuttamista ääkköset menivät kantaankin oikein. Tässä mainittiinkin jossain, että kannankin pitää tässä tapauksessa olla UTF-8 koodattu, mutta tästä en tiedä sen enempää.
Onnistun tekemään niin, että korvaan viestin ääkköset niitä vastaavilla koodeilla, mutta validaattori valittaa tästä, että näin ne eivät saisi olla ;)
Haluaisin sivut mahdollisimman validiksi, jotta ne toimisivat paremmin, joten olisi kiva, kun se validaattori sanoisi, että sivut ovat kunnossa, eli pitäisi saada se kirjoitusjuttu kuntoon.
Tässä epätoivoinen yritykseni:
<?php include("login_check.php"); if($admin) { echo '<table width="100%" align="center" style="border: 1px solid black"> <form action="admin.php?act=kviesti&laheta" method="post">'; if(isset($_GET["laheta"])) { $viesti = $_POST["viesti"]; $bbc = $_POST["bbc"]; if(!empty($viesti)) { if($bbc == true) $bbcformat = 1; else $bbcformat = 0; $time = time(); $folder = 1; $ip = $_SERVER["REMOTE_ADDR"]; $email = $admin["email"]; $www = $admin["www"]; $message = $viesti; $name = $admin["name"]; mysql_query("INSERT INTO messages(time, folder, bbc, ip, name, email, www, message) VALUES( $time, $folder, $bbcformat, '$ip', '$name', '$email', '$www', '$message')") or die(mysql_error()); } else echo "<tr><td><b>Viesti jäi täyttämättä!</b></td></tr>"; } ?> <tr><td>Lisää uusi viesti<hr></td></tr> <tr><td><input type="checkbox" name="bbc" value="1" CHECKED> BBcode käytössä</td></tr> <tr><td><textarea name="viesti" rows="10" class="textarea"></textarea></td></tr> <tr><td><input type="submit" value="Lähetä viesti"></td></tr> </form></table> <?php } else die(); ?>
Ps. Älkääs pelästykö tuota koodia :D
Edit: Kun viesti lähetetään, niin muuttujassa olevan viestin ääkköset ovat kunnossa. Kun viesti kirjoitetaan kantaan, ääkköset 'sekoavat'.
Kai sulla on meta tiedot kunnossa?
Jeps.
Aihe on jo aika vanha, joten et voi enää vastata siihen.