Umlauteproblem bei Formulardaten -> MS SQL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • AmicaNoctis
    antwortet
    Das geht aber nicht über ein Formular, du musst es direkt als PHP-Code eintragen. Das betrifft auch die Kontrollausgabe: Dort meinte ich sowas wie
    PHP-Code:
    echo "\xe2\x80\x94"

    Einen Kommentar schreiben:


  • Hannes_L
    antwortet
    Der String wird über ein Formular übergeben (in meinem Beispiel habe ich es einfach im Feld "Geburtsname" eingetragen):

    PHP-Code:
    $gebname $_POST['fgebname'];
    $query "INSERT INTO yx (..., gebname,...) VALUES (..., $gebname, ...)";
    odbc_exec($conn$query); 

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Zitat von Hannes_L Beitrag anzeigen
    respektive steht nun in der DB "\xe2\x80\x94"
    Das kann eigentlich gar nicht sein. Zeigst du mal bitte den PHP-Code her, mit dem du diesen String in die DB schiebst?

    Einen Kommentar schreiben:


  • Hannes_L
    antwortet
    So,

    Skriptausgabe: 34 92 120 101 50 92 120 56 48 92 120 57 52 34

    der Rest bleibt gleich, respektive steht nun in der DB "\xe2\x80\x94"

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Die Zeichenkette mit den \x irgendwas musst du double-quoted (mit ", nicht mit ') angeben, damit es funktioniert.

    Einen Kommentar schreiben:


  • Hannes_L
    antwortet
    Hallo Amica,
    leider kam ich erst heute dazu alles zu testen.

    Wenn ich in ein Formularfeld dieses Zeichen kopiere und mit deiner Script prüfe kommt folgendes im Browser an:
    Code:
    92 120 101 50 92 120 56 48 92 120 57 52
    Erstelle ich eine Person, und gebe bspw. im Feld "Geburtsname" die Zeichenkette ein, steht anschließend folgendes in der DB:
    Code:
    \xe2\x80\x94
    Wenn mein Script die Zeichenkette ausgibt, kommt ebenfalls \xe2\x80\x94 im Browser an.

    Laut PHP-Info ist MBString verfügbar (Multibyte Support: enabled; Multibyte string engine: libmbfl; HTTP input encoding translation: enabled)
    Ich hoffe damit kann man etwas anfangen.

    LG Hannes
    Zuletzt geändert von Hannes_L; 07.09.2010, 12:49.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Sorry, ich meinte natürlich implode

    Einen Kommentar schreiben:


  • Hannes_L
    antwortet
    Hallo AMica,

    beim Formularfeld kommt

    Code:
    PHP Warning:  explode() expects parameter 2 to be string, array given in E:\xxx\testoutput.php on line 22
    Die anderen Schritte kann ich leider erst morgen testen, schonmal danke für die Hilfestellung.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Am Namespace kann es nicht liegen, das ist Unsinn. Behalte bitte deinen vorbildlichen XHTML Strict-Doctype.

    Wenn du mit einem kleinen Testscript die Zeichenkette "\xe2\x80\x94" in die DB schreibst, was steht dann in der DB drin?

    Was kommt auf dem Server an, wenn du in ein Formularfeld dieses Zeichen reinkopierst?: –
    Bitte mit
    PHP-Code:
    $input = ... // der ankommende String
    $output = array(); // Kontrollausgabe
    for ($i 0$i strlen($input); $i++) $output[] = ord($input[$i]);
    echo 
    explode(" "$output); 
    prüfen.

    Was kommt im Browser an, wenn dein Script die Zeichenkette von oben ("\xe2\x80\x94") ausgibt?

    Ist auf deinem Server die MBString-Erweiterung verfügbar?

    Anhand deiner 4 Antworten kann ich dir vermutlich helfen.

    Gruß,

    Amica

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Hannes_L
    antwortet
    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)
    Zuletzt geändert von Hannes_L; 03.09.2010, 16:11.

    Einen Kommentar schreiben:


  • eagle275
    antwortet
    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
    Zuletzt geändert von eagle275; 03.09.2010, 15:59.

    Einen Kommentar schreiben:


  • Hannes_L
    antwortet
    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

    Einen Kommentar schreiben:


  • Hannes_L
    antwortet
    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.

    Einen Kommentar schreiben:


  • eagle275
    antwortet
    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/
    Zuletzt geändert von eagle275; 02.09.2010, 21:11.

    Einen Kommentar schreiben:

Lädt...
X