[1.14] Filter und Umlaute

Dieser Bereich dient dazu, neue Features zu diskutieren und für die Entwicklung zu dokumentieren. // This area is dedicated to new features including proposals and documentation.
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

[1.14] Filter und Umlaute

Beitrag von dave » 17.03.2011, 16:57:10

Hallo zusammen,

ich habe im Moment so meine Probleme mit Umlauten (ö, ä, ü). Diese werden durch die Filter immer entfernt, ach wenn ich den OnlyLettersFilter verwende. Sind denn ö, ä, ü keine Buchstaben? ;)

Da ich jedoch nicht den OnlyLettersFilter nutzen möchte, da ich auch gewisse Satzzeichen benötige, nutze ich den SpecialCharacterFilter. Diesen habe ich mir auch mal angepasst, damit ich meine ö, ä, und ü verwenden kann.

Sollten wir nicht allgemein die Umlaute mit in die Reg Exp rein nehmen?

Hier mal mein Vorschlag für die SpecialCharacterFilter.php:

Code: Alles auswählen

   /**
    * <!--
    * This file is part of the adventure php framework (APF) published under
    * http://adventure-php-framework.org.
    *
    * The APF is free software: you can redistribute it and/or modify
    * it under the terms of the GNU Lesser General Public License as published
    * by the Free Software Foundation, either version 3 of the License, or
    * (at your option) any later version.
    *
    * The APF is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    * GNU Lesser General Public License for more details.
    *
    * You should have received a copy of the GNU Lesser General Public License
    * along with the APF. If not, see http://www.gnu.org/licenses/lgpl-3.0.txt.
    * -->
    */

   import('tools::form::filter','AbstractFormFilter');

   /**
    * @package tools::form::filter
    * @class SpecialCharacterFilter
    *
    * Implements a filter, that removes all characters except
    * "0-9A-Za-z-_\.& !,:\?\+\(\)\/%$�"\'".
    *
    * @author Christian Achatz
    * @version
    * Version 0.1, 11.09.2009<br />
    */
   class SpecialCharacterFilter extends AbstractFormFilter {

      public function filter($input){
         return preg_replace('/[^\pL0-9-_\.& !,:\?\+\(\)\/%$�"\']/ui','',$input);
       // end function
      }

    // end class
   }
 
Ich habe lediglich aus dem ^0-9A-Za-z ein ^\pL0-9 gemacht. Damit habe ich meine ö, ä, ü ...

Das könnte man natürlich nun auch auf die anderen Filter noch übernehmen.

Was denkt ihr darüber?

APFelsahne
Beiträge: 222
Registriert: 18.03.2010, 13:13:07
Wohnort: Ludwigshafen am Rhein
Kontaktdaten:

Re: [1.14] Filter und Umlaute

Beitrag von APFelsahne » 18.03.2011, 11:48:44

Hm müsste $input nicht dann garantieren, dass sein Wert in UTF-8 codiert ist?
Ich denke, sonst gibts Probleme/funktioniert nicht wie gewollt, sobald der Wert in einer anderen Art codiert ist.
Grüße, Florian
BildAPF-Extension wsCatalyst

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.14] Filter und Umlaute

Beitrag von dave » 18.03.2011, 21:53:50

Dann frag ich einfach mal andersrum: Wie kann ich auch Umlaute in die Filter einbeziehen?

APFelsahne
Beiträge: 222
Registriert: 18.03.2010, 13:13:07
Wohnort: Ludwigshafen am Rhein
Kontaktdaten:

Re: [1.14] Filter und Umlaute

Beitrag von APFelsahne » 18.03.2011, 23:47:07

ungetestet: \w
\w steht für jedes wort. vllt. reicht das schon aus?
A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place. For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w.
Quelle: http://www.php.net/manual/de/regexp.ref ... escape.php
Grüße, Florian
BildAPF-Extension wsCatalyst

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: [1.14] Filter und Umlaute

Beitrag von dr.e. » 20.03.2011, 11:55:52

Hallo dave,

die beiden Filter sind bewusst sehr restriktiv gehalten, für den Deutsch-sprachigen Raum ist das natürlich etwas zuviel. :roll: Wir können beide Filter gerne um die Umlaute erweitern.

Die \w-Alternative halte ich für etwas zu offen, Umlaute jedoch direkt ins Pattern zu schreiben oder über \pL zu matchen setzt UTF-8-Input voraus. Jedoch ist das ganze - wie auch unter http://stackoverflow.com/questions/1930 ... -preg-pcre beschrieben - nicht ganz unkompliziert, weil ein explizites Pattern voraussetzt, dass das System auf dem PHP kompiliert ist die Vorgehensweise unterstützt.

Ich halte daher die \w-Geschichte fast für die einzig gangbare Möglichkeit, wenn wir eine breite Kompatibilität garantieren wollen. Kannst du den OnlyLettersFilter mal mit folgendem Pattern testen:

Code: Alles auswählen

class OnlyLettersFilter extends AbstractFormFilter {

   public function filter($input) {
      return preg_replace('/[^\w& ]/i', '', $input);
   }

} 
Ebenso könnten wir den SpecialCharacterFilter so betreiben:

Code: Alles auswählen

class SpecialCharacterFilter extends AbstractFormFilter {

   public function filter($input) {
      return preg_replace('/[^0-9\w\-_\.& !,:\?\+\(\)\/%$"\']/i', '', $input);
   }

} 
Kannst du das mal für deinen Anwendungsfall testen?
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.14] Filter und Umlaute

Beitrag von dave » 20.03.2011, 18:31:58

Ich habe beides mal getestet.

Die Umlaute (öäüß) werden bei beiden Filtern komplett wieder raus geschmissen. Klappt also nicht.

Was mir ausserdem nebenbei aufgefallen ist, dass beim OnlyLettersFilter trotzdem das " (Anführungszeichen) erhalten bleibt.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: [1.14] Filter und Umlaute

Beitrag von dr.e. » 20.03.2011, 22:51:01

Hallo dave,

dann bleibt nur noch die Option, dass wir die Umlaute direkt angeben. Das könnte man mit der Escape-Sequenz \xhh machen. Das könnte wie folgt funktionieren:

Code: Alles auswählen

class OnlyLettersFilter extends AbstractFormFilter {

   public function filter($input) {
      return preg_replace('/[^\xc4\xd6\xdc\xe4\xf6\xfc& ]/i', '', $input);
   }

} 
Kannst du das mal testen? Ich fürchte nur, dass es auch hier zu Problemen kommt, weil \xhh Zeichensatz-abhängig ist.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.14] Filter und Umlaute

Beitrag von dave » 20.03.2011, 23:05:51

Wow, damit bleibt einfach mal gar nichts mehr übrig. Einzig das & (Und) bleibt erhalten. Selbst normale Buchstaben oder Zahlen werden gefiltert ;).

Könnte man das nicht in einer Config auslagern? Ist zwar blöd, wieder eine Config mehr, aber gibts sonst noch nen Weg?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: [1.14] Filter und Umlaute

Beitrag von dr.e. » 20.03.2011, 23:16:26

Hmm, das hatte ich fast befürchtet. :roll: Kannst du mal den configure-Command deiner PHP-Version posten und dazu noch System-Infos deines Servers? Ich versuche das dann mal auf einem meiner LINUX-Test-Server und auch meinem Windows-Notebook nachzustellen. Vielleicht gibt es abhängig der System-Konfiguration noch eine Möglichkeit.

Alternative ist sicher eine Konfiguration, hier würde ich aber dazu tendieren, dass der Filter diese vom Formular-Feld ausliest. Sprich so:

Code: Alles auswählen

<html:form name="Test">
  <form:text name="..." filter-expr="/[^A-Za-z0-9& ]/i" />
  <form:addfilter
    class="OnlyLettersFilter"
    control="..."
    button="..."
  />
  <form:button name="send" value="GO" />
</html:form>
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.14] Filter und Umlaute

Beitrag von dave » 20.03.2011, 23:27:27

Jup, die Config-Option via Formularfeld klingt gar nicht so doof!

Ich habe eine phpinfo online:
http://lmvz.de/phpinfo.php (Domain hat sich geändert!)

Mehr zum System kann ich gar nicht sagen. Ich weiss das selbst nicht, ist ein Virtual Server Managed der kleinsten Güte bei Host Europe. Wir sind gerade erst beim Entstehen ;).

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: [1.14] Filter und Umlaute

Beitrag von dr.e. » 28.03.2011, 22:45:25

Hallo dave,

sorry, dass ich noch nicht geantwortet habe. Inzwischen sind die manuellen Escapes aus den Input-Filtern im 1.14er-Zweig entfernt. Sollten diese bisher Probleme gemacht machen, ist das zumindest beseitigt.

Was deine PHP-Version angeht, sieht man leider nicht genau auf welcher Maschine das compiliert wurde. Leider da also auch kein Hinweis. :roll:

Ein Test ergibt, dass das auf einem Windows-Hobel (win-1251/iso-latin-13) nicht funktioniert, selbst wenn das Formular ein korrektes accept-encoding spezifiziert. Auf meiner Fedora 12 Maschine verhält es sich identisch (=funktioniert nicht). Ich sehe also nur noch die Lösung, die ich zuletzt vorgeschlagen habe, sprich die Filter-Regexp kann pro Feld angepasst werden. Geht das in Ordnung?
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.14] Filter und Umlaute

Beitrag von dave » 29.03.2011, 12:40:07

dr.e. hat geschrieben:sorry, dass ich noch nicht geantwortet habe.
Immer ruhig, kein Stress! ;)
dr.e. hat geschrieben:Ich sehe also nur noch die Lösung, die ich zuletzt vorgeschlagen habe, sprich die Filter-Regexp kann pro Feld angepasst werden. Geht das in Ordnung?
Klaro!

Ich kann auch mal beim Hoster anfragen, warum ich Probleme mit den Umlauten habe ^^. Aber ich kann mir die Antwort schon in etwa ausmalen: Das muss am Script liegen ... Aber den Spass gönne ich mir mal ... ;)

[EDIT]
Mein Anliegen ist nun in der Host Europe Fachabteilung angekommen. Die werden sich denke ich mir mal die Scripte genauer anschauen. Ich bin gespannt und poste hier dann Feedback.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: [1.14] Filter und Umlaute

Beitrag von dr.e. » 29.03.2011, 23:29:38

Hallo dave,

gut, dann werde ich die Filter so anpassen und mich hier wieder melden.

Bin mal gespannt, was die Jungs vom Support rückmelden. ;)
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.14] Filter und Umlaute

Beitrag von dave » 31.03.2011, 14:06:27

Hallöchen ;)


Ich habe heute Antwort vom Support erhalten. Ich habe dabei mal ganz explizit auf meine Probleme mit dem RandomStringManager hingewiesen und auch eine kleine Demo-Seite für die Jungs eingerichtet.

Hier mal die Antwort vom Support:
Sehr geehrter Herr Mohrig,

vielen Dank für Ihre Rückmeldung.

> Das Klassenscript finden Sie unter:
> *ROOT/xxx/apps/tools/randomstring*
>
> mit dem Namen:
> *RandomStringManager.php*

Wie unsere Softwareentwicklung festgestellt hat, wird der String in der Klasse UTF8 codiert, wobei die Zeichencodierung der Seite ebenfalls UTF8 ist. Dies verträgt sich vermutlich nicht ganz.

In dem Hash kommen auch Zeichen vor, die zuvor so nicht definiert wurden. Ändert man den Browser-Zeichensatz auf ISO 8859-1 kann man dies sehen.

Ein utf8_decode() um das html_entity_decode() Konstrukt könnte das Problem beheben.

Wir bitten jedoch um Ihr Verständnis, dass wir keinen Support für Anwendungen und Skripte Dritter leisten können und diese Hinweise ohne Gewähr von uns gegeben wurden.

Mit freundlichen Grüßen
Frank Madro

Ich bin das dann nochmals intensiv durchgegangen und habe mit einiges an Infos bezüglich UTF-8 besorgt. Ich war sogar schon auf dem Trichter, dass es gewisse Zeichen gar nicht bei der UTF-8 Codierung gibt, aber eine Tabelle lehrte mich eines besseren ;).

Schlussendlich haben mir die beiden Funktionen utf8_encode() und utf8_decode() gereicht. Dazu aber im passenden Post zum RandomStringManager mehr.

Ich werde diese Funktionen auch mal bei den Filtern ein wenig austesten ... vllt. hilft es ja bei mir :)

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: [1.14] Filter und Umlaute

Beitrag von Screeze » 31.03.2011, 14:11:33

Wie unsere Softwareentwicklung festgestellt hat, wird der String in der Klasse UTF8 codiert, wobei die Zeichencodierung der Seite ebenfalls UTF8 ist. Dies verträgt sich vermutlich nicht ganz.
?????? So soll es doch sein ????
Ein utf8_decode() um das html_entity_decode() Konstrukt könnte das Problem beheben.
das ist villeicht ein workaround aber nicht die lösung des Problems, wie ich das sehe.
Eine Frage: verwendest du den 3. Parameter von html_entity_decode() ? damit kannst du den Zeichensatz nämlich explizit festlegen, villeicht hilft das?


edit: hab mal in deinen quellcode im andern thread gesehen, das ist nicht so ganz Sinn der Sache wenn ich das richtig sehe. Du konvertierst den String in ein ISO-...Format, mixt das ganze, und machst dann wieder ein utf-8 draus. du solltest sicherstellen, dass die input daten direkt utf-8 sind, dann kannst du damit auch normal arbeiten. Ich vermute durch deine vorher angewendete html_entity_decode, die du warscheinlich ohne 3. Parameter aufrufst, wird der String "zerschossen".

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast