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 Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 26-09-2009, 03:00
carlos1985
 Registrierter Benutzer
Links : Onlinestatus : carlos1985 ist offline
Registriert seit: Jan 2004
Beiträge: 13
carlos1985 ist zur Zeit noch ein unbeschriebenes Blatt
carlos1985 eine Nachricht über ICQ schicken
Standard Funktion funktioniert nur lokal

Hallo zusammen,

ich bin total verwirrt. Vielleicht hat jemand eine Idee, also mein Problem.
Habe bei mir xampp eingerichtet. Nun hab ich eine Seite mit Datenbank erstellt und einen Administrationsbereich.
Wenn ich einen Datensatz anlege werden die Textfelder mit htmlspecialchars() umgewandelt und in die DB gespeichert. Unter dem Localhost wird dann aus einem ü ein ü -> Alles korrekt
Wenn ich die Seite auf den Server schiebe und nichts verändere dann bleibt das ü ein ü. Das passiert mit allen Sonderzeichen und Umlauten.

Nun wenn ich einfach
Code:
echo htmlspecialchars("öäÖäÄ");
mal eingebe dann wird online im Quelltext nur die Umlaute ausgegeben, aber nicht die HTML Elemente.


Ein anderes Problem, was nichts mit htmlspecialchars zu tun hat, habe ich mit Formularen.
Meine Formularfelder haben alle einen Namen mit eckigen Klammern, z. B. field[meinname], oder field[text]. Unterm localhost kann ich ein Array aufrufen, so:
Code:
$name = $_POST["field"]["meinname"];
$text = $_POST["field"]["text"];
Das funktioniert einwandfrei.

Nun auf dem Server geht das nicht, da liegen dann die Felder in einem etwas anderen Array
Code:
$name = $_POST["field"][0];
$text = $_POST["field"][1];
Mein erster gedanke war dass die PHP Version nicht stimmt. Aber auf meinem localhost habe ich die 5.2.9 und auf dem Server die 5.2.1. Die htmlspecialchars() Funktion gibt es doch schon seit PHP4

Jemand eine Idee? Kann man diese Funktion irgendwie deaktivieren oder aktivieren? Das Problem hatte ich noch nie, und ich setze oft die Funktion ein?

Oder kann es an der Codierung des Dokumentes liegen?

Über einen Tip würde ich mich freuen

Gruß

Daniel
Mit Zitat antworten
  #2 (permalink)  
Alt 26-09-2009, 10:20
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

1:
Ein utf-8 ü ist ganz was anderes als ein iso-8859-15 ü. Verwende die richtigen Zeichensätze, dann brauchst du deine Umlaute auch nicht umzuformen.

2:
Wenn Postdaten einen numerischen Index bekommen, dann läuft bei der Formularerstellung schon was schief.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 26-09-2009, 10:54
carlos1985
 Registrierter Benutzer
Links : Onlinestatus : carlos1985 ist offline
Registriert seit: Jan 2004
Beiträge: 13
carlos1985 ist zur Zeit noch ein unbeschriebenes Blatt
carlos1985 eine Nachricht über ICQ schicken
Standard

Hi,

danke für deine Antwort.
Mir ist schon klar dass der Zeichensatz richtig gesetzt sein muss. Das ü wird auch korrekt ausgegeben. Nur ich speicher die Eingaben in einer Datenbank, da soll nicht das ü sondern ein ü drin stehen. Das funktioniert unter localhost mit htmlspecialchars(). Aber unter dem Server im Internet geht das nicht.
Genau wie mit dem Formular.

ääähm. Hab grade mal nen Test gemacht.
Also auf Windows PC mit Xampp und als Bearbeitungsprogramm pspad funktionierts einwandfrei unter localhost.

Nun bin ich unter MAC OS X und localhost und als Bearbeitungsprogramm eclipse. Dort geht es nun auch nicht mit der htmlspecialchars Funktion.

Und auf dem Server im Internet geht es auch nicht?

Wo ist denn der Unterschied zwischen localhost Windows und MAC? Wenn beide die gleiche PHP Version haben? verstehe ich nicht

Geändert von carlos1985 (26-09-2009 um 10:58 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 26-09-2009, 11:11
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Der pspad verwendet iso-8859-2 und eclipse utf-8 als Standard.
Zitat:
Nur ich speicher die Eingaben in einer Datenbank, da soll nicht das ü sondern ein ü drin stehen.
Das ist eine (sorry) dumme Idee.


Mache dich über Zeichensätze und ihre Verwendung kundig.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #5 (permalink)  
Alt 26-09-2009, 11:16
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von carlos1985 Beitrag anzeigen
Mir ist schon klar dass der Zeichensatz richtig gesetzt sein muss. Das ü wird auch korrekt ausgegeben. Nur ich speicher die Eingaben in einer Datenbank, da soll nicht das ü sondern ein ü drin stehen.
HTML-Entities haben in der Datenbank nix verloren. Warum willst du das machen?
Mit Zitat antworten
  #6 (permalink)  
Alt 26-09-2009, 11:19
carlos1985
 Registrierter Benutzer
Links : Onlinestatus : carlos1985 ist offline
Registriert seit: Jan 2004
Beiträge: 13
carlos1985 ist zur Zeit noch ein unbeschriebenes Blatt
carlos1985 eine Nachricht über ICQ schicken
Standard

OK, das sehe ich ein. Wenn die Programme verschiedene Zeichensätze verwenden. Hab zwar im PSPad unter Format die Dateien auf utf-8 gesetzt, aber anscheinend wird das nicht übernommen.
Aber, ich habe ja keine Probleme mit dem Anzeigen und darstellen von Sonderzeichen.
Momentan werden die sonderzeichen, auch das ü, in der Datenbank als ü gespeichert und als ü auf der Seite angezeigt. Wenn ich aber nun die Datenbank auslese, und den Inhalt mit htmlspecialchars ausgebe sollte doch im Quelltext ein ü herauskommen, oder?
Genauso wenn ich aufrufe:
Code:
echo htmlspecialchars("ü");
Aber die Funktion scheint nichts zu machen, jedenfalls werden die Zeichen nicht verändert? Liegt das auch am Zeichensatz?


Zitat:
Zitat von h3ll Beitrag anzeigen
HTML-Entities haben in der Datenbank nix verloren. Warum willst du das machen?
Also eigentlich haben ich von anfang an die Sonderzeichen in der Datenbank gespeichert. Dann funktionieren aber meine links nicht, denn aus einem Feld wird dann ein Link generiert, aber ein ü im Link ist nicht schön. Und wenn ich im Tex ein ü habe kann ich einmal die Ausgabe im HTML Quelltext vernünftig machen und das Zeichen beim ausgeben ersetzen. Denn Sonderzeichen werden irgendwie auf dem Server nicht umgewandelt. Auch mit str_replace bekomme ich die nicht ersetzt. Die ü bekomme ich mit str_replace ersetzt. Dann funktioniert alles.

Geändert von carlos1985 (26-09-2009 um 11:26 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 26-09-2009, 12:04
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Um Parameter in URLs zu escapen, verwende urlencode() oder bau das Query mit http_build_query().

Und warum sollte htmlspecialchars() ü in ü konvertieren? Steht doch gar nicht so im Handbuch.
Mit Zitat antworten
  #8 (permalink)  
Alt 26-09-2009, 12:07
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

So macht das wenig Spass....

Warum:
Du triffst massig Fehlannahmen. Oder baust logische Ketten mit Lücken. Es ist schwerer Leuten in ihren Fehlannahmen zu korrigieren, als was "neues" zu erklären. Doppelte Arbeit doppelte Anstengung. Erst aus dem Kopf prügeln und dann was neues rein prügeln. Klar lässt sich niemand gerne was aus dem Kopf prügeln, von daher ist auch mit heftigem Wiederstand zu rechnen.


Beispiele:
Zitat:
Hab zwar im PSPad unter Format die Dateien auf utf-8 gesetzt, aber anscheinend wird das nicht übernommen.
Ungeprüfte Annahme!
Beweise es oder vergiss es.
Und nein: pspad funktioniert. du machst was anderes falsch.


Zitat:
Wenn ich aber nun die Datenbank auslese, und den Inhalt mit htmlspecialchars ausgebe sollte doch im Quelltext ein ü herauskommen, oder?
Du meinst ein natives ü, oder?
Nein!
1. du verwechselst htmlspecialchars() mit htmlentities()
2. du ignorierst, dass beide Funktionen mehrere Parameter haben

Zitat:
Denn Sonderzeichen werden irgendwie auf dem Server nicht umgewandelt. Auch mit str_replace bekomme ich die nicht ersetzt.
str_replace ist wie alle php String Funktionen standardmäßig auf iso-8859-1 geeicht. Beachte die zusätzlichen Parameter und auch die mb_*() Funktionen.


Vorschlag:
1. den Content-type Header auf den gewünschten Zeichensatz stellen
2. den HTML HEAD META Tag auf den gewünschten Zeichensatz stellen
3. das Formular auf den gewünschten Zeichensatz stellen
4. die Datenbank auf den gewünschten Zeichensatz stellen
5. die Tabellen auf den gewünschten Zeichensatz stellen
6. die Tabellen Spalten auf den gewünschten Zeichensatz stellen
7. die Datenbank Verbindung auf den gewünschten Zeichensatz stellen

Und dann beobachtest du den "Datenstrom"!
Überall wo Ausgaben ins HTML stattfinden verwendest du htmlspecialchars() mit 3 Parametern. Und das unmittelbar vor der Ausgabe.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #9 (permalink)  
Alt 26-09-2009, 12:18
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

stimme combie ausnahmslos zu
Mit Zitat antworten
  #10 (permalink)  
Alt 26-09-2009, 12:50
carlos1985
 Registrierter Benutzer
Links : Onlinestatus : carlos1985 ist offline
Registriert seit: Jan 2004
Beiträge: 13
carlos1985 ist zur Zeit noch ein unbeschriebenes Blatt
carlos1985 eine Nachricht über ICQ schicken
Standard

Danke für eure Antworten.

also ich mach es jetzt so, die Sonderzeichen landen in der datenbank und werden so gespeichert und ausgegeben. Für die Links nehme ich dann htmlentities.

Was mich halt verwirrt ist die Tatsache, dass die Funktion htmlspecialchars unter Windows und nem localhost mit sowie ohne Parameter aus einem ü ein ü macht aber unter mac nicht. Habe jetzt alle aufrufe von htmlspecialchars in htmlentities geändert und es funktioniert auf dem Server.

Ich weiß leider nicht was ich zwischen eclipse und pspad falsch mache. Wenn ich jetzt unter eclipse eine Datei in ISO erstelle und die dann im pspad aufmache sind die Sonderzeichen trotzdem alle weg, bzw. anders. Stell ich in Pspad in einer Neuen Datei auf utf-8 und öffne die dann in eclipse ist auch wieder alles durcheinander.
Wahrscheinlich ist es nicht so gut die Formate durcheinander zu bringen.

Und das mit dem Formular ist auch so eine Sache. Das wird doch nicht am Zeichenformat liegen?
Mit Zitat antworten
  #11 (permalink)  
Alt 26-09-2009, 14:48
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Was mich halt verwirrt ist die Tatsache, dass die Funktion htmlspecialchars unter Windows und nem localhost mit sowie ohne Parameter aus einem ü ein ü macht aber unter mac nicht.
Beachte die Zeichensätze, dann siehst du auch das Warum!
Und das hat nichts mit Windows oder Mac zu tun.


Zitat:
Habe jetzt alle aufrufe von htmlspecialchars in htmlentities geändert und es funktioniert auf dem Server.
Ohje....
Ich dachte, ich hätte mich klar genug ausgedrückt und du inzwischen das Handbuch gelesen.

Also nochmal im Klartext:
Wenn die Zeichensätze der Daten und der gewünschten Ausgabe übereinstimmen, braucht es kein htmlentities()!
htmlspecialchars() ist dann völlig ausreichend.

Zitat:
Und das mit dem Formular ist auch so eine Sache.
Ich sehe kein Formular!
In meiner Vorschlags Liste steht was du tun sollst.


Zitat:
Das wird doch nicht am Zeichenformat liegen?
Das Wort "Zeichenformat" ist mir in dem Zusammenhang nicht bekannt.
Zeichenformat !== Zeichensatz

Zitat:
Wahrscheinlich ist es nicht so gut die Formate durcheinander zu bringen.
KA, was du da mit Format meinst, aber durcheinander ist nie gut. Zumindest nicht, wenn es zu solchen Verwirrungen führt.
__________________
Wir werden alle sterben
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Funktion] fopen failed to open stream - lokal, ohne http... ?? Shunty PHP Developer Forum 32 13-06-2008 18:57
funktion lokal gehts - Online nicht Jemand PHP Developer Forum 6 17-05-2007 17:25
[Funktion] Mathematische Funktion zum Feststellen ob es sich um eine grade Zahl handelt??? MasterOfPuppets PHP Developer Forum 2 21-09-2005 09:46
[Funktion] suche funktion die true ausgiebt, wenn ein string 'connect' enthaelt. Bigzed PHP Developer Forum 7 22-02-2005 21:13
[Funktion] "Leerzeilenverlust" bei mail() lokal hottemp Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 4 21-01-2004 13:50

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

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

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:26 Uhr.