php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Bewertung: Bewertung: 19 Stimmen, 5,00 durchschnittlich.
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 01-09-2010, 19:16
Hannes_L
 Registrierter Benutzer
Links : Onlinestatus : Hannes_L ist offline
Registriert seit: Oct 2004
Beiträge: 28
Hannes_L ist zur Zeit noch ein unbeschriebenes Blatt
Hannes_L eine Nachricht über ICQ schicken
Standard Umlauteproblem bei Formulardaten -> MS SQL

Hallo zusammen,

ich hoffe ich habe das richtige Unterforum erwischt, sollte dies nicht der Fall sein wäre ich für ein Verschieben dankbar.

Ich habe folgendes Problem bei einer Projektumsetzung:

1) Umgebung
- PHP 5.2.10
- MS SQL Datenbank
- ODBC Anbindung

2) Vorhaben
Es existiert bereitseine MS SQL-Datenbank welche Benutzerdaten beinhaltet. Nun soll mittels PHP neue Benutzer angelegt, sowie bestehende Benutzer verändert werden können. Grundprinzip des ganzen läuft soweit.

3) Problem
- Nach dem ersten Auslesen von Benutzerdaten fiel mir auf, das Personen die neu angelegt werden ohne Umlaute eingetragen werden. Bspw. wurde aus 'Hans Müller' in der Datenbank 'Hans Mller'.
- Um dieses Problem zu umgehen habe ich im umgebenden HTML-Bereich den charset auf UTF-8 gestellt was soweit auch funktionierte - alle Personen wurden ordnungsgemäß mit Umlauten eingetragen.
- Nun wurden aber die Umlaute mit UTF-8 vom Brwoser bei des Ausgabe nicht korrekt dargestellt, sondern lieferten nur Hyroglyphen. Dies wäre anfürsich nicht so schlimm, ich könnte ja notfalls die Seiten, welche Inhalte aus der Datenbank anzeigen, einfach auf charset ISO-8859-1 stellen. Jedoch stellt sich das ganze als Problem dar, wenn bereits erstellte Datensätze geändert werden sollen: Hier werden Daten aus der DB gelesen und in Formularfelder voreingetragen in denen man beliebige Änderungen vornehmen kann. Da aber das speichern nur in UTF-8 funktioniert, läd es mir den Namen 'Hans Müller' als 'Hans M[]ller' in das Formularfeld.


Wie kann ich diesem ganzen Charset-Chaos entkommen, ohne am Ende eine zusammengefrickelte Lösung zu haben?

Freue mich auf eine Antwort
Hannes
Mit Zitat antworten
  #2 (permalink)  
Alt 01-09-2010, 19:36
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

verwende überall die selbe codierung!

1) Sind die Daten in der DB alle im selben Encoding?
2) Prüfe ob die Verbindung zur Datenbank, auch hier über alle selbes Encoding?
3) sind die "html-seiten" ebenfalls im selben Encoding?

Danach sollte es klappen. Irgendwo scheinst du allerdings noch den Wurm drin zu haben.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3 (permalink)  
Alt 01-09-2010, 20:40
Hannes_L
 Registrierter Benutzer
Links : Onlinestatus : Hannes_L ist offline
Registriert seit: Oct 2004
Beiträge: 28
Hannes_L ist zur Zeit noch ein unbeschriebenes Blatt
Hannes_L eine Nachricht über ICQ schicken
Standard

Ok, ich werde die Schritte durchgehen. Leider habe ich jedoch keinen direkten Zugriff auf den Rechner mit der Originalen DB, sondern nur eine lokale Testdatenbank auf einem SQL Server 2005. Kann ich das encoding eines Datensatzes aus der ferne per SQL-Statement auslesen? (Die Testdatenbank mit fiktiven Daten scheint Latin1_General_CI_AS zu sein).

Kann ich bei einer ODBC-Verbindung das encoding einstellen? (Für JDBC geht dies ja über die Connection URL)

Die HTML-Seiten in denen der PHP-Code eingebettet ist würde ich ja gerne im selben encoding haben, momentan wechselt es zwischen UTF-8 für Datenbankeingaben und ISO-8859-1 für die Anzeige von Datensätzen.
Mit Zitat antworten
  #4 (permalink)  
Alt 01-09-2010, 21:46
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

hm Latin1 General passt eigentlich ganz gut zu 8859-1 (Western europe ) ,

persönlich würde ich das php auf 8859-1 stellen, die Datenbank auf UTF-8 (funzt bei mir sowohl für Ausgabe als auch Eingabe, läuft nämlich über das gleiche Script) ..- jedenfalls hab ich da bisher keine Probleme bei mir festgestellt - was dir dann die "kleine" Arbeit überlässt, die in der Zwischenzeit fehlerhaft eingetragenen Daten händisch zu ändern .. je nachdem wie viele das sind, ist das eigentlich ne überschaubare Arbeit. wenn abgesichert ist, dass nicht dauernd neue dazukommen

da ich aber mit ner MySQL zusammenarbeite , weiß ich leider nicht, wie du deine ODBC Connection entsprechend umstellst ..
__________________

Wer LESEN kann, ist klar im Vorteil!

Geändert von eagle275 (01-09-2010 um 21:48 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 01-09-2010, 22:59
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von eagle275 Beitrag anzeigen
hm Latin1 General passt eigentlich ganz gut zu 8859-1
Das liegt vermutlich daran, dass Latin-1 und ISO 8859-1 genau dasselbe ist.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 01-09-2010, 23:01
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

recht hast du - ich hatte das anfangs auch in meinem Post stehen, fand aber dann die Info nicht mehr soo wichtig und hab sie rausgenommen ... es hilft ihm ja wenig wenn die beiden dasselbe sind - und trotzdem in seinem Browser die Umlaute nicht korrekt dargestellt werden
__________________

Wer LESEN kann, ist klar im Vorteil!
Mit Zitat antworten
  #7 (permalink)  
Alt 02-09-2010, 15:06
Hannes_L
 Registrierter Benutzer
Links : Onlinestatus : Hannes_L ist offline
Registriert seit: Oct 2004
Beiträge: 28
Hannes_L ist zur Zeit noch ein unbeschriebenes Blatt
Hannes_L eine Nachricht über ICQ schicken
Standard

Also bisher umfasst die Datenbank ca. 4000 Datensätze. Neu eingetragen sind vielleicht bisher 100 Stück, das wäre noch händisch machbar. Jedoch verstehe ich immer noch nicht wieso es mir keine Umlaute einträgt bei ISO 8859-1.

Ich hab das ganze nochmal lokal getestet, mit PHP 5.3.1, da funktioniert alles mit ISO-8859-1, ohne wenn und aber. Vielleicht wäre ein Update von PHP 5.2.10 auf 5.3.1 auf dem Server die einfachste Lösung ?!?
Mit Zitat antworten
  #8 (permalink)  
Alt 02-09-2010, 18:46
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

du solltest unbedingt mal testen, in welchem Zeichenformat deine Verbindung zur Datenbank läuft ...
__________________

Wer LESEN kann, ist klar im Vorteil!
Mit Zitat antworten
  #9 (permalink)  
Alt 02-09-2010, 22:33
Hannes_L
 Registrierter Benutzer
Links : Onlinestatus : Hannes_L ist offline
Registriert seit: Oct 2004
Beiträge: 28
Hannes_L ist zur Zeit noch ein unbeschriebenes Blatt
Hannes_L eine Nachricht über ICQ schicken
Standard

Gerne, wenn mir jemand sagt oder nen Link gibt wie das bei einer ODBC-Verbindung rauszufinden ist. Irgendwelche Ansätze?

lg Hannes
Mit Zitat antworten
  #10 (permalink)  
Alt 02-09-2010, 23:09
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

auf welchem System soll dein PHP laufen ? auch windows ?

hier eine Antwort aus PHP.net Manual User comments :

After extensive research trying to get PHP on Linux communicating with SQL Server 2005 and 2008 including support for all Unicode, MAX and XML data types I could not find any open source solutions...yes, I spent a lot of time trying to get FreeTDS to work to no avail.

I found one free solution that runs on Windows which is to use the "SQL Server Driver for PHP" provided by Microsoft (Microsoft Drivers for PHP for SQL Server). The driver relies on the Microsoft Native Client ODBC drivers for SQL Server 2008 (part of the "Microsoft SQL Server 2008 Native Client" which is downloadable from Microsoft) which is why this solution will not work on anything except Windows.

I did find a solution that works for PHP on Linux but it's not free...use the standard PHP::ODBC lib (free) and the Easysoft ODBC driver for SQL Server (not free, but reasonable by Enterprise standards). You can check out the ODBC driver by going here Easysoft Data Access and looking for "Easysoft ODBC-SQL Server Driver"


- vielleicht hilft dir ja der mittlere Abschnitt - nachdem ich einige Texte zu ODBC und encoding gelesen habe, scheint das direkt davon abzuhängen, welche Optionen man beim Installieren des ODBC-Treibers wählt - ....
hier noch mehr Infos zum native SQL driver
For more information and extension download please see
http://www.codeplex.com/SQLSRVPHP
They have also blog on http://blogs.msdn.com/sqlphp/
__________________

Wer LESEN kann, ist klar im Vorteil!

Geändert von eagle275 (02-09-2010 um 23:11 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 03-09-2010, 14:03
Hannes_L
 Registrierter Benutzer
Links : Onlinestatus : Hannes_L ist offline
Registriert seit: Oct 2004
Beiträge: 28
Hannes_L ist zur Zeit noch ein unbeschriebenes Blatt
Hannes_L eine Nachricht über ICQ schicken
Standard

Danke für die ganzen Infos.

PHP läuft auf ner Windows-Maschine mit IIS - da ich aber selbst keinen Zugriff habe werde ich mal den Admin bitten diese Möglichkeit zu testen.

Melde mich in wie weit das funktioniert hat.
Mit Zitat antworten
  #12 (permalink)  
Alt 03-09-2010, 17:39
Hannes_L
 Registrierter Benutzer
Links : Onlinestatus : Hannes_L ist offline
Registriert seit: Oct 2004
Beiträge: 28
Hannes_L ist zur Zeit noch ein unbeschriebenes Blatt
Hannes_L eine Nachricht über ICQ schicken
Standard

So, so langsam aber sicher kann ich weiter eingrenzen.
Da ich mir fast sicher war das es nicht an der Datenbank selbst liegt habe ich kurz einen einfachen Eingabe-/Ausgabetest gemacht ohne DB-Verbindung mit folgenden zwei Dateien:

Testinput.php
HTML-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Umlauttest</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link href="css/style.css" media="screen" rel="stylesheet" type="text/css"/>			
</head>
<body>
	<div id="wrapper">
		<form method="post" action="testoutput.php">
			<table>
				<tr>
					<td>
						<input type="text" name="fName" maxlength="50" />
					</td>
					<td>
						<input type="submit" value="testen..." name="submit" />
					</td>
				</tr>			
			</table>		
		</form>	
	</div>
</body>
</html>
Testoutput.php
HTML-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Umlauttest</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link href="css/style.css" media="screen" rel="stylesheet" type="text/css"/>			
</head>
<body>
	<div id="wrapper">
		<?php		
				if ($_POST['fName'] != "")
					{								
						$Name = $_POST['fName'];
						
						echo $Name;
					}				
		?>
	</div>
</body>
</html>
Als Ergebnis kam folgendes bei raus:

- Beim lokalen System (XAMPP mit PHP 5.3.1) wird bei der Eingabe "Müller" auch "Müller" ausgegeben.
- Auf dem Server (mittlerweile mit PHP 5.3.3) wird "Mller" ausgegeben.

Überseh ich grade irgendwas offentsichtliches, oder gibt's hier wirklich ein Problem?

lg Hannes
Mit Zitat antworten
  #13 (permalink)  
Alt 03-09-2010, 17:50
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

ein minimaler :kannst du es mal ohne den xml-namespace beim html-element versuchen?

bei mir sieht das so aus..

HTML-Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html>
<head>
<title>Titel</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
und es klappt ...(PHP 5.3.0) wobei es wohl nicht die PHP-version ist .. eher noch Einstellungen in der verwendeten PHP-Ini
__________________

Wer LESEN kann, ist klar im Vorteil!

Geändert von eagle275 (03-09-2010 um 17:59 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 03-09-2010, 18:07
Hannes_L
 Registrierter Benutzer
Links : Onlinestatus : Hannes_L ist offline
Registriert seit: Oct 2004
Beiträge: 28
Hannes_L ist zur Zeit noch ein unbeschriebenes Blatt
Hannes_L eine Nachricht über ICQ schicken
Standard

Puh, kann also nur noch an der INI liegen, da es auch ohne xml-namespace nicht funktioniert.

Code:
_SERVER["HTTP_ACCEPT_CHARSET"]	ISO-8859-1,utf-8;q=0.7,*;q=0.7
Dieser Teil ist jedoch bei der lokalen Testumgebung wie auch auf dem Server gleich. Ich verzweifle noch

edit: die aktuelle INI des Server hätte ich hier, hilft es vielleicht weiter da weiter zu schauen? (defaul_charset = "iso-8859-1" und mssql.charset = "iso-8859-1" sind momentan auskommentiert)

Geändert von Hannes_L (03-09-2010 um 18:11 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 03-09-2010, 18:17
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

poste ruhig mal - ich hab da zwar nicht so viel ahnung von .. aber lesen ja noch andere
__________________

Wer LESEN kann, ist klar im Vorteil!
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/100181-umlauteproblem-bei-formulardaten-ms-sql.html
Erstellt von For Type Datum
Umlaute, JQuery, Ajax, Formulare und PHP | linux-blog &#8211; Fa. anracon &#8211; Dr. Mönchmeyer This thread Refback 18-03-2013 03:05

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
formulardaten daSky16 HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 7 09-11-2006 14:07
[MYSQL|PHP|SUSE] Das alte Umlauteproblem Crawen SQL / Datenbanken 3 13-02-2006 15:49
Umlauteproblem bei JS Ticker nyfan HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 3 03-01-2006 03:03
Formulardaten in DB hydrococcus SQL / Datenbanken 13 25-05-2004 15:52
formulardaten mit php molowan PHP Developer Forum 5 27-09-2002 14:21

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

Formmailer v1.6.1 Bootstrap 4

Formmailer v1.6.1 Bootstrap wurde extra für Bootstrap entwickelt. Mit Bootstrap kann man schnell und einfach kleine oder große Projekte entwickeln, die auf Geräten in allen erdenklichen Formen funktionieren.

18.12.2018 arne-home | Kategorie: PHP/ Formular
HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:18 Uhr.