Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ongelmia ääkkösissä

Sivun loppuun

MIB [02.07.2009 20:23:05]

#

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.

TeNDoLLA [02.07.2009 21:11:20]

#

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.

MIB [02.07.2009 22:17:37]

#

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?

MIB [03.07.2009 11:04:58]

#

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.

Metabolix [03.07.2009 11:08:03]

#

MIB: Luepa tästä.

MIB [03.07.2009 11:15:43]

#

Kiitos :)

MIB [06.07.2009 15:55:11]

#

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.

Lebe80 [06.07.2009 16:02:39]

#

Puskuroi tuloste ja enkoodaa sitten ja tulosta uudelleen.

MIB [06.07.2009 16:31:27]

#

Lebe80 kirjoitti:

Puskuroi tuloste --

Nyt en tainnut ymmärtää, mitä tarkoitit. Voisitko selventää?

Chiman [06.07.2009 16:36:20]

#

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

MIB [06.07.2009 19:21:50]

#

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'.

Moiman [07.07.2009 10:26:47]

#

Kai sulla on meta tiedot kunnossa?

MIB [07.07.2009 11:02:11]

#

Jeps.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta