str_replace

Hallo liebe wissende.

Ich habe ein Problemchen… :frowning:
ich habe mir eine shoutbox gebastelt mit ajax. laufen tut sie eigentlich gut, nur werden die daten einwenig falsch in die DB eingetragen und auch wieder falsch ausgegeben. :frowning:
Jeder Umlaut wird als Zeichen geschrieben und ausgegeben. Hat ev. einer eine Idee wie ich das lösen könnte?

<?php dbconn();
loggedinorreturn(); $nick = $CURUSER["username"]; $message = htmlspecialchars(trim($\_POST["message"])); if($message != "") { $user = "" . $nick . "";

$sql = "INSERT INTO ajaxchat VALUES('', " . sqlesc($user) . ", " . sqlesc($message) . ", 'yes', '".time()."')";
mysqli_query($GLOBALS["___mysqli_ston"], $sql);
}

$sql = "SELECT * FROM ajaxchat WHERE visible = 'yes' ORDER BY id DESC LIMIT 30";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $sql);

if ($result)
while($row = mysqli_fetch_array($result))
{
print(date("(H:m:s)",$row["time"])." " .$row["user"]. "  ".format_comment($row["message"], false)."
\n");
}
?>

und in der DB sieht das ganze so aus:
CREATE TABLE IF NOT EXISTS `ajaxchat` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user` VARCHAR(150) NOT NULL,
`message` text NOT NULL,
`visible` ENUM( 'yes', 'no' ) DEFAULT 'yes' NOT NULL,
`time` datetime NOT NULL
) ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_german2_ci AUTO_INCREMENT=1;

leider wird auch datum überhaupt nicht richtig geschrieben. :frowning:

hat ev. einer eine Idee?

also das mit der Zeit habe ich unterdessen hinbekommen. :smile:

aber das er die Zeichen nicht macht, noch nicht. :frowning:
ä = ä
ö = ö
ü = ü

/

Hallo,
das könnte an der Bestimmung der Zeichencodierung liegen.
Wenn z.B. die Datenbank in UTF-8 angelegt ist
muss dieses auch im Metatag + im Form angegeben werden.
Beispiel:

Der Metatag sollte bei der Eingabe + Ausgabe vorhanden sein.
Entsprechendes gilt für alle anderen Zeichencodierungen.
Vielleicht hilft das weiter.
gruss
detlef

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

habs rausgefunden… war eigentlich einfach… ich war nur zu dumm um es selbst zu merken von anfang an…

die lösung:

<?php require_once("include/bittorrent.php");
dbconn(); loggedinorreturn(); $nick = $CURUSER["username"]; $message = trim(htmlspecialchars($\_POST["message"])); $message = str\_replace(array("Ä","Ö","Ãœ","ä","ö","ü","ß"), array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß"), $message); if($message != "") { $user = "" . $nick . "";

$sql = "INSERT INTO ajaxchat VALUES('', " . sqlesc($user) . ", " . sqlesc($message) . ", 'yes', '".time()."')";
mysql_query($sql);
}

if (isset($_GET["hid"]))
{
$sql = "UPDATE ajaxchat SET visible = 'no' WHERE id = " . intval($_GET["hid"]);
mysql_query($sql);
}
if (isset($_GET["del"]))
{
$sql = "DELETE FROM ajaxchat WHERE id = " . intval($_GET["del"]);
mysql_query($sql);
}

$sql = "SELECT * FROM ajaxchat WHERE visible = 'yes' ORDER BY id DESC LIMIT 30";
$result = mysql_query($sql);

if ($result)
while($row = mysql_fetch_array($result))
{
if (get_user_class() >= UC_MODERATOR)
{
$hid = "[-]";
$del = "[X]";
}
else
{
$hid = "";
$del = "";
}
$datum = getdate($row["time"]);
$tag = date("d.m",$row["time"]);
$zeit = (($datum["hours"] \n");
}
?>