Seite 1 von 1

Problem mit sonderzeichen mit UTF-8

Verfasst: Di 15.Mär, 2016 09:01
von erzvolker58
ich habe ein problem beim absenden von einem formular mit sonderzeichen
Fuchsie 'Waldi'
so geht es
Fuchsie Waldi
so schaut das im moment aus

Code: Alles auswählen

echo "<input type='text' name='titel1_aendern' value='".htmlentities(utf8_encode($row->titel1), ENT_QUOTES)."' size='30'>";
fehlermeldung
web: update
titel: Fuchsie 'Waldi'Konnte Termine nicht ändern, weil: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Freundeskreis Saar-Pfalz'. Ständig kommen neue Sorten hinzu, werden untereina' at line 1

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Di 22.Mär, 2016 05:51
von erzvolker58
mir ist da noch etwas eingefallen, in der phpbb2 hatte ich da mal auch ein problem mit dem ' , da hattest du was geändert, ging um die Betreffzeile, finde es aber nicht mehr

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Di 22.Mär, 2016 07:06
von oxpus
Um ein ' oder " beim Speichern korrekt in einem eigene Script uu verwenden, muss der String maskiert werden.
Die einfachste und unsicherste Methode wäre

Code: Alles auswählen

$varible = trim(addslashes($variable));
DIe Methode, die die Datenbank bereits mitliefert, schon deutlich besser:

Code: Alles auswählen

$variable = mysql_real_escape_string($varible);

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 01.Apr, 2016 06:33
von erzvolker58
dbeintrag.zip
(1.43 KiB) 406-mal heruntergeladen
hallo, wo muss ich das ändern, kann da nicht so richtig was finden

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 01.Apr, 2016 17:16
von oxpus
Jede Variable, die aus $_POST übernommen wird und letztlich in der Datenbank landen soll ist zu konvertieren.
Und das sind hier auch wieder eine ganze Menge...

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 01.Apr, 2016 18:27
von erzvolker58
also du meinst das so
aus

Code: Alles auswählen

$tag_aendern = $_POST["tag_aendern"];
so ändern

Code: Alles auswählen

$tag_aendern = (isset($_POST["tag_aendern"])) ? mysql_real_escape_string($_POST["tag_aendern"]): '';

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 01.Apr, 2016 21:08
von oxpus
Ja, genau so.

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 20.Mai, 2016 08:59
von erzvolker58
hallo, ich habe das problem immer noch, habe das also so geändert, aber wenn ich ein text sende, zb. für kommt für in der datenbank an, was mach ich falsch?

im formular habe ich die zeile so drinn

Code: Alles auswählen

maxlength='10000' value='' class='purple'>".htmlentities(utf8_encode($row->text1), ENT_QUOTES)."</textarea>

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 20.Mai, 2016 17:48
von oxpus
Es ist unwichtig, wie es in der Datenbank ankommt. Es muss nur beim Anzeigen und Bearbeiten korrekt kodiert sein.

Code: Alles auswählen

htmlentities(utf8_encode($row->text1), ENT_QUOTES)
wäre schon korrekt, dann müsste aber auch beim Auslesen aus der Datenbank das ganze umgekehrt werden, um wieder korrekte Zeichen zu erhalten.

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 20.Mai, 2016 22:24
von erzvolker58
es zeigt mir immer noch die seite so an

http://www.deutsche-fuchsien-ges.de/fk/ ... 3&mitte=fk ??

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Sa 21.Mai, 2016 01:26
von oxpus
Na ja, du hast ja auch einen gemischten Inhalt.
Die alten Einträge sind noch nicht auf den neuen Stand, die neueren aber schon.
Eines kann man anzeigen, aber nicht beide parallel.

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Sa 21.Mai, 2016 06:26
von erzvolker58
wenn ich in der datenbank die umlaute richtig eintrage, werden sie auch richtig angezeigt. bekomme die aber nicht richtig übertragen.

Code: Alles auswählen

<?php
session_start();

if($_SESSION[passwd] != "ja")
{	
	session_destroy();
	echo "Sie sind nicht eingeloggt!<meta http-equiv = 'refresh' content='1; URL=./index.php'>";
}
elseif($_SESSION[passwd] == "ja"){
	
if(!isset($_SESSION[session_ID])) {
$_SESSION[session_ID] = session_id();
$_SESSION[uhrzeit]=date("Y-m-d H:i:s");

}
}
?>
<?php
include("./data/data.php");
mysql_select_db($db);	

$webtext1 = (isset($_POST["webtext1"])) ? mysql_real_escape_string($_POST["webtext1"]): '';
$webtext2 = (isset($_POST["webtext2"])) ? mysql_real_escape_string($_POST["webtext2"]): '';
$titel1 = (isset($_POST["titel1_aendern"])) ? mysql_real_escape_string($_POST["titel1_aendern"]): '';
$titel2 = (isset($_POST["titel2_aendern"])) ? mysql_real_escape_string($_POST["titel2_aendern"]): '';
$web = (isset($_POST["web"])) ? mysql_real_escape_string($_POST["web"]): '';
$webseite = (isset($_POST["webseite"])) ? mysql_real_escape_string($_POST["webseite"]): '';
echo "web: ".$web."<br>titel: ".$titel1;

if($web == "neu") {
	
		$web_neu = "INSERT INTO freundeskreise_web(fid_web, text1, text2, titel1, titel2, website) ";
		$web_neu .= "VALUES('$_SESSION[fk_id]', '$webtext1', '$webtext2', '$titel1', '$titel2', '$webseite') ";

		$web_eintragen = mysql_query($web_neu, $con)
		or die ("Konnte Termine nicht eintragen, weil: ". mysql_error());

		echo "Sie werden gleich weitergeleitet !<meta http-equiv = 'refresh' content='1; URL=./webeingabe.php'>";

}

elseif($web == "update") {
	
	$web_aendern = "UPDATE freundeskreise_web SET text1 = '$webtext1', text2 = '$webtext2', titel1 = '$titel1', titel2 = '$titel2', ";
	$web_aendern .= "website = '$webseite' WHERE fid_web ='$_SESSION[fk_id]'";

		$web_aendern2 = mysql_query($web_aendern, $con)
		or die ("Konnte Termine nicht ändern, weil: ". mysql_error());
	
	echo "Sie werden gleich weitergeleitet !<meta http-equiv = 'refresh' content='1; URL=./webeingabe.php'>";
	
}

mysql_close($con);
?>

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Sa 21.Mai, 2016 11:49
von oxpus
Die Datenbanktabellen sind auf UTF-8 eingestellt, richtig?
Dazu ist auch die Webseite auf UTF-8 umgestellt, oder?

Dann solltest du vor dem Speichern auch utf8_encode nehmen, damit die Werte korrekt in die Datenbank geschrieben werden (dann aber auch mit "Sonderzeichen", was völlig normal und auch nötig ist!).
Und zur Anzeige kann man dann entweder, wie die Daten eben ausgelesen werden, mit utf8_decode wieder anzeigen, bzw. diesen Schritt auch wieder weglassen.

Ggf. wenn das nichts nutzt, die Funktionen umgekehrt verwenden, also utf8_decode zum schreiben und utf8_encode zum auslesen.

Wie gesagt:
Alte Einträge müssten einmal überarbeitet werden, um korrekt in UTF-8 angezeigt und verwendet zu werden.
Die neuen Einträge sollten aber schon mal korrekt sein, damit man die alten überhaupt bearbeiten könnte.

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Sa 21.Mai, 2016 20:08
von erzvolker58

Code: Alles auswählen

<table width='100%'>
<tr>
<td align='center'>";
//echo "In else";

if(!empty($row->bild1)){
echo "<img src='../fk/termine/web/".$_SESSION[fk_id]."_oben.jpeg' style='border: 1px solid #000000;' Alt=''>";
}
else {
echo "<img src='../fk/termine/web/dummy2.jpeg' style='border: 1px solid #C71585;' Alt=''>";
}

echo "<br>";

if(!empty($row->titel1)){
echo "<input type='text' name='titel1_aendern' value='".htmlentities($row->titel1, ENT_QUOTES)."' size='30'>";
}
else {
echo "<input type='text' name='titel1_aendern' value='Bildunterschrift 1' size='30'>";
}

echo "
</td>
<td width='270px' class='norm_fett'>
<textarea name='webtext1' cols='38' rows='12' wrap='physical' 
    maxlength='10000' value='' class='purple'>".htmlentities(utf8_encode($row->text2), ENT_QUOTES)."</textarea>
</td>
</tr>

<tr>
<td width='270px' class='norm_fett'>
<textarea name='webtext2' cols='38' rows='12' wrap='physical' 
    maxlength='10000' value='' class='purple'>".htmlentities(utf8_encode($row->text2), ENT_QUOTES)."</textarea>
</td>
<td align='center'>";

if(!empty($row->bild2)){
echo "<img src='../fk/termine/web/".$_SESSION[fk_id]."_unten.jpeg' style='border: 1px solid #000000;' Alt=''>";
}
else {
echo "<img src='../fk/termine/web/dummy1.jpeg' style='border: 1px solid #C71585;' Alt=''>";
}

echo "<br>";

if(!empty($row->titel2)){
echo "<input type='text' name='titel2_aendern' value='".htmlentities($row->titel2, ENT_QUOTES)."' size='30'>";
}
else {
echo "<input type='text' name='titel2_aendern' value='Bildunterschrift 2' size='30' >";
}

echo "
<input type='hidden' name='web' value='update'>
</td>
</tr>";
titel geht, text geht nicht, habe das aber auch schon umgekert versucht, werde noch wahnsinnig

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Sa 21.Mai, 2016 21:12
von oxpus
Dann versuch es doch mal ohne utf8_encode oder utf8_decode ;-)

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Sa 21.Mai, 2016 21:46
von erzvolker58
es will nicht, die datenbank steht auf utf8_general_ci

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Sa 21.Mai, 2016 23:03
von oxpus
Na, es muss sich doch etwas ändern, wenn du den Text mit oder ohne Konvertierung anzeigen lässt...

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: So 22.Mai, 2016 04:37
von erzvolker58
ja, es zeigt garnichts mehr an oder halt äöü

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: So 22.Mai, 2016 14:00
von oxpus
Noch mal rekaputiliert:
Die neuen oder neu geänderten Einträge werden so oder so nicht korrekt angezeigt?

Zunächst einmal die Fakten:
Die Seite wird als UTF-8-kodiert angezeigt.
Damit sollten alle Inhalte, die dargestellt oder auch über ein Formular abgesendet werden, als utf-8-kodierte Zeichen in der Datenbank landen.
Jetzt sollte man also nicht noch einmal mit htmlentities und utf8_encode die Zeichenkodierung ändern, da ja bereits utf-8 vorliegt.

Wenn das Speichern ohne vorherige Konvertierung der Zeichen nicht sauber klappt, sollte man zunächst dort mit utf8_decode oder utf8_encode die Zeichen vor dem Speichern in der Datenbank ändern, damit diese dort auch korrekt ankommen.
Denn auch wenn die Tabelle auf utf8 eingestellt ist, heisst das noch lange nicht, dass die Inhalte auch korrekt unterstützt werden. Das kommt nämlich dann auch noch u. a. auf den Treiber des Datenbankservers und dem Zeichensatz des Datenbankschemas und diversen anderen Dingen an.

Aber zurück zum Thema:
Wie werden die Inhalte im Formular zum ändern angezeigt?
Dort bereits mit den gesamten Sonderzeichen?
Und was passiert, wenn du den Text dann erst einmal wieder manuell änderst?
Wird der dann weiterhin "verstümmelt", wenn du ihn das nächste Mal anzeigen lässt oder bearbeiten willst?

Wie gesagt:
Die Webseite wird als utf8 angezeigt, daher sollte zunächst keine weitere Konvertierung vorgenommen werden.
Das betrifft aber dann auch nur alle neuen oder neu gespeicherten Texte, nicht bereits gespeicherte Texte, die vielleicht noch nicht in UTF-8 vorliegen!
Die hatte ich ja bereits einmal versucht anzupassen, aber dennoch muss zumindest jeder neue Eintrag schon mal sauber laufen.
Entferne daher alles, was irgendwas konvertiert. Also wie oben genannt ohne htmlentities und utf8_encode im Eingabeformular, wenn wenn dort schon Mist reinkommt, wird es hinten nicht besser, wenn die Daten übernommen und gespeichert werden sollen.
Im Formular die Texte also nicht konvertieren. Wenn würde ich das eher zum Speichern in die Datenbank machen (also utf8_decode), damit die Texte dann doch erst mal als latin-1 gespeichert werden.

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Mo 23.Mai, 2016 11:26
von erzvolker58
hast PN

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 27.Mai, 2016 13:39
von erzvolker58
hallo karsten, habe es hinbekommen, danke :)

noch eine frage, wie bekomme ich in solch einen text ein zeilenumbruch rein, html geht da ja nicht ??

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 27.Mai, 2016 18:47
von oxpus
Entweder im Text einfach Enter für eine neue Zeile drücken oder <br />, bzw. im Code das Sonderzeichen \n

Re: Problem mit sonderzeichen mit UTF-8

Verfasst: Fr 27.Mai, 2016 20:59
von erzvolker58
hatte da mal nl2br gelöscht, nun wieder rein gemacht, und es geht :)

Code: Alles auswählen

echo nl2br(htmlentities($row->text2, ENT_QUOTES));