php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.10.2009, 11:52  
Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 48
PHP-Kenntnisse:
Anfänger
vici befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Anzahl der Unicode-Zeichen in einem String zählen

Hallo,

ich benutze zur Sicherheit die Funktion von Erich Kachel (Fortify PHP Webapps against Cross-Site-Scripting | PHP Application and Website Defense, die jedes Zeichen (mit Ausnahme von a-z A-Z und 0-9) in Unicode wandelt.

Außer der Anzeigekompatibilität die man dadurch erreicht ist es auch gegen ungewollten Code von Nutzen.

Jetzt würde ich aber gerne die Anzahl der Zeichen in einem String zählen.
Mit strlen() kein Problem, aber da alle Zeichen in Unicode gewandelt werden, ergibt sich eine andere Wortbreite.

So hat das Wort "Hütte" 5 Zeichen lt. strlen().

Aber "Hütte" (Unicode codiert) eben 12 Zeichen, obwohl es für meine Auswetung eigentlich nur die echten 5 Zeichen haben dürfte.

Wie also kann man denn alle &#xxxxx; zu EINEM Zeichen zusammenfügen (rechnerisch) damit "Hütte" wieder 5 Zeichen hat?

Danke Euch im Voraus

Liebe Grüße

Vici
vici ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.10.2009, 11:57  
Benutzer
 
Benutzerbild von kremser
 
Registriert seit: 25.02.2008
Beiträge: 55
PHP-Kenntnisse:
Anfänger
kremser befindet sich auf einem aufstrebenden Ast
Standard

Vor dem Umwandeln zählen
kremser ist offline  
Alt 06.10.2009, 12:13  
Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 48
PHP-Kenntnisse:
Anfänger
vici befindet sich auf einem aufstrebenden Ast
Standard

Gute Idee ;o)

Nee, mal im Ernst. Die Daten werden in die Datenbank gepackt.
Und ich muss zum späteren Zeitpunkt die Daten wieder auslesen und die Länge genauso ermitteln können.

Aber für einen Moment hatte ich gedacht, das es eine gute Idee ist ;o)
vici ist offline  
Alt 06.10.2009, 12:30  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.733
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Originaldaten in die DB schreiben und immer erst bei Ausgabe durch die Funktion schicken? Alles andere würde ich als unpraktikabel einstufen. Was du an Geschwindigkeit durch das kodierte Speichern gewinnst, verlierst du wieder durch komplizierte Funktionen zur Berechnung der Characterlänge.
mermshaus ist offline  
Alt 06.10.2009, 12:48  
Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 48
PHP-Kenntnisse:
Anfänger
vici befindet sich auf einem aufstrebenden Ast
Standard

Meine seite soll aber weltweit nutzbar sein, dh. auch chinesische Schriftzeichen sollen einwandfrei gespreichet werden.
Um Codierungsprobleme zu vermeinden ist dieses Vorgehen nicht schlecht.
Außerdem, einmal in der Datenbank als Unicode, kann man auf jedem Browser, der die Anzeige unterstützt, immer das leich Zeichen sehen. Immer und überall auf dieser Welt. und das alles ohne hin und hercodoeren. Einfach gleich richtig in die Datenbank.

Ich zumindenst finde das nicht übel.

Grüße

Vici
vici ist offline  
Alt 06.10.2009, 12:54  
Benutzer
 
Benutzerbild von kremser
 
Registriert seit: 25.02.2008
Beiträge: 55
PHP-Kenntnisse:
Anfänger
kremser befindet sich auf einem aufstrebenden Ast
Standard

Dann zähle die Zeichen vor dem Codieren und speichere die Anzahl mit in die Datenbank
kremser ist offline  
Alt 06.10.2009, 12:56  
Benutzer
 
Registriert seit: 16.09.2009
Beiträge: 55
PHP-Kenntnisse:
Fortgeschritten
Sascha Ahlers befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von vici Beitrag anzeigen
[...] Mit strlen() kein Problem, aber da alle Zeichen in Unicode gewandelt werden, ergibt sich eine andere Wortbreite. [...]
Ich arbeite seit einigen Jahren (wegen UTF-8) ausschließlich mit MbString:

PHP: Multibyte String
--> PHP: mb_strlen - Manual


Ohne vorherige Initialisierung des Charsets auf UTF-8 würde es dann so funktionieren:
PHP-Code:
echo mb_strlen('Hütte''utf-8'); 


MfG,
Sascha

Geändert von Sascha Ahlers (06.10.2009 um 13:01 Uhr).
Sascha Ahlers ist offline  
Alt 06.10.2009, 12:56  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 992
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

Mir fällt da nur die folgende Lösung ein:

Die Länge eines Strings ermittelst du mit strlen. Strlen Versteht aber keine Multibytezeichen (Unicode sind Multibyte zeichen mit 1-3 Bytes). Versuche mal mb_strlen

// Zu langsam ^^
__________________
Frank ist offline  
Alt 06.10.2009, 13:14  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.733
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Zitat:
Zitat von vici
Meine seite soll aber weltweit nutzbar sein, dh. auch chinesische Schriftzeichen sollen einwandfrei gespreichet werden.
Um Codierungsprobleme zu vermeinden ist dieses Vorgehen nicht schlecht.
Außerdem, einmal in der Datenbank als Unicode, kann man auf jedem Browser, der die Anzeige unterstützt, immer das leich Zeichen sehen. Immer und überall auf dieser Welt. und das alles ohne hin und hercodoeren. Einfach gleich richtig in die Datenbank.

Ich zumindenst finde das nicht übel.
Dagegen, Unicode in die Datenbank zu speichern, sage ich ja gar nichts. Aber um das zu erreichen, was du da beschreibst, reicht es, das DB-Feld einfach auf UTF-8 oder so zu setzen und die Originalstrings einzutragen. Die von dir angesprochene "Kachel-Funktion" hat damit gar nichts zu tun. Bei der geht es darum, XSS bei der Ausgabe zu verhindern.

Zitat:
Zitat von kremser
Dann zähle die Zeichen vor dem Codieren und speichere die Anzahl mit in die Datenbank
Bitte nicht.
mermshaus ist offline  
Alt 06.10.2009, 13:33  
Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 48
PHP-Kenntnisse:
Anfänger
vici befindet sich auf einem aufstrebenden Ast
Standard

@mermshaus
ja, du hast völlig recht. ich habe mich da etwas unglücklich ausgedrückt. natürlich verbinde ich beide Vorteile (so dachte ich zumindenst). Die Verarbeitung von Unicodezeichen und das Vehindern von XSS.

Aber mal was anderes: Was ist das denn für ein Unicode, der bei der Kachel-Funktion da rauskommt: ü = ü

Das ist doch nicht UTF-8 ??? Oder doch. Zumindenst sah UTF-8 in der Datenback anders aus.

Ich frage deshalb, weil die gute Idee von Sascha Ahlers
Zitat:
Ohne vorherige Initialisierung des Charsets auf UTF-8 würde es dann so funktionieren:
PHP-Code:
echo mb_strlen('Hütte', 'utf-8');
Leider nicht funktioniert. Es werden trotzden 12 Zeichen ausgegeben. Wenn das UTF-8 wäre, müsste es doch klappen???

Was für eien Unicode-Vesion ist das denn??

Grüße

vici

Korrektur: Mein String auf der Datenbank sieht natürlich so aus: Hütte
Also mb_strlen('Hütte', 'utf-8'); wäre richtiger.
vici ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Zeichen im String zählen, aber nur die Buchstaben apfelsaft PHP Tipps 2009 20 31.07.2009 16:20
Zeichen zählen Textarea Kein Genie JavaScript, Ajax und mehr 2 07.06.2009 19:23
Records mit PHP ? SimStar001 PHP Tipps 2009 11 08.04.2009 15:14
PHP5 SOAP - Problem mit Arrays Calexico PHP-Fortgeschrittene 0 11.09.2008 12:06
Ziffern und Sonderzeichen in einem String zählen PHP Tipps 2006 2 15.03.2006 12:22
anzahl der zeichen im string janni PHP Tipps 2007 2 22.12.2005 09:18
Kombination: Zeichen zählen / - ersetzen King2k PHP Tipps 2005-2 2 24.10.2005 20:44
anzahl von string im string PHP-Fortgeschrittene 3 13.09.2005 17:02
Wie prüfe ich einen String ob nur Zahlen enthalten sind ? PHP Tipps 2005 7 31.05.2005 13:02
ASCII - Zeichen in String einbinden faux PHP Tipps 2005 10 28.05.2005 18:29
nicht erlaubte Zeichen im SQL - String Datenbanken 0 16.10.2004 11:47
Anzahl von Zeichen ermitteln PHP Tipps 2004 3 20.08.2004 15:56
Funktion zum zählen von Zeichen in einem String PHP Tipps 2004 2 15.07.2004 16:00
[Erledigt] Anzahl der Suchtreffer in einem String PHP Tipps 2004 10 13.07.2004 02:38

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php anzahl zeichen string, php string anzahl zeichen, string anzahl zeichen, anzahl zeichen string php, php anzahl zeichen in string, anzahl zeichen in string, anzahl zeichen im string php, php anzahl zeichen im string, php anzahl zeichen, string anzahl zeichen php, unicode ü, php variable anzahl zeichen, php string zeichen anzahl, http://www.php.de/php-einsteiger/59698-erledigt-anzahl-der-unicode-zeichen-einem-string-zaehlen.html, sql anzahl zeichen, sql anzahl zeichen zählen, php mb_strlen, php anzahl zeichen in einem string, anzahl zeichen in einem string, anzahl buchstaben string

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:58 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum