News - Features - Downloads - Forum - Team - Support - Switch View: Screen
Login - Registrierung - Passwort vergessen

Antworten: 16
Seite [1]
Mindcrime


Geekboy





Beiträge: 1155
# Thema - 10.11.2010 um 21:45 Uhr
Sorry aber die cs_substr funktion ist aber total schlecht:

Da wird ein utf8_decode(), also UTF-8 to single-byte ISO-8859-1 gemacht und dan wieder zurueck nach UTF-8.
Weil substr "does not handle unicode charsets". So bekommst nichts raus.

Russisch wird dan umgesetzt auf ??? und ??? dan wieder auf ???.

Das einzige was richtig funktioniert ist mb_substr(). Die meisten server sollten derzeit mbstring inclusief haben, und wenn nicht, dan hat man immer pech mit multibyte charsets... Weil Russisch wird dan eh nicht richtig gehen...

Meine cs_textcut() versucht mb_substr wenn vorhanden und macht vorher ein html_entity_decode um zu verhindern das HTML stellen unterbrochen werden. Ich habs selber die cs_textcut() funktion getestet mit Deutsch, Englisch, Koreanisch, Japanisch, Chinesisch und Russisch. Das funktioniert einwandfrei wenn man mb_substr() hat.
http://trac.csphere.eu/csp/browser/CSP%20Module/mindcrime/general/system/runstar tup/tools.php

Wie gesagt, anders gehts nicht...

<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
</head>
<body>
<?php

$start = 0;
$length = 5;
$text = 'Видеотрансл яция от Абвера сегодня вечером!';
$realtext = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
$text = mb_substr($realtext, $start, $length, 'UTF-8');
echo 'TEXT MB='.$text.'<br />';
$text = utf8_encode(substr(utf8_decode($realtext), $start, $length));
echo 'TEXT DE='.$text.'<br />';
$text = substr($realtext, $start, $length);
echo 'TEXT SU='.$text.'<br />';
?>
</body>
</html>


erfolgt:
TEXT MB=Видео
TEXT DE=?????
TEXT SU=Ви�


Zuletzt editiert von Mindcrime am 10.11.2010 um 21:52 Uhr (3x Editiert)
Inaktiv
hajo ClanSphere Team


VIP - Poster




Herkunft: Barsbüttel
Beiträge: 9411
# Antwort: 1 - 10.11.2010 um 22:21 Uhr
da mbstring bei mir auf kaum einem webspace aktiviert ist und ich diese erweiterung auch eh ungern verwende, ist mit iconv als default mal die funktion etwas geändert worden. ich hoffe es sagt dir jetzt mehr zu. dein zusatz mit dem entity decode und so weiter möchte ich in der funktion nicht wirklich drin haben, die komplexität soll so gering wie möglich sein.


------------------
ClanSphere - professional clan care starts here

Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 2 - 10.11.2010 um 22:30 Uhr
Du brauchst auch noch html_entity_decode, besonders bei navlists...

Und wieso willst du kein multibyte string erweiterung von PHP benutzen?
Die ist immo unentbehrlich wenn man UTF-8 hat und mehr wie nur Deutsch benutzt in PHP. Ich hab da meine erfahrungen...

Du kannst natuerlich auch iconv_substr benutzen, aber substr ist nur ein teil des problems. Diesselbe probleme gibts auch bei strtolower und strtoupper (mb_strtolower, mb_strtoupper) und dafuer gibts kein iconv function...


Zuletzt editiert von Mindcrime am 10.11.2010 um 22:30 Uhr (1x Editiert)
Inaktiv
|
hajo ClanSphere Team


VIP - Poster




Herkunft: Barsbüttel
Beiträge: 9411
# Antwort: 3 - 10.11.2010 um 22:51 Uhr
das entity decode öffnet gefahren, wenn das substr nach dem cs_secure statt findet, was eigentlich eh nirgends der fall sein sollte, daher klammer ist dies einfach aus. wenn da etwas ungünstig abgeschnitten wird ist halt pech. um dies zu beheben müsste man im ansatz schon im gesamten system noch änderungen durchführen.

betreffend strto upper/lower müsste man das auch gleich für alle anderen länge / schneid funktionen im string bereich machen, da ist mir der aufwand jetzt zu groß. zudem reicht iso für 99% der benutzer von clansphere vollkommen aus.

es war jetzt einfach nur der fall, dass eben bei den navlisten einigermaßen passend gekürzte texte erscheinen sollten. alles weitere werden wir richtung coresphere berücksichtigen, aber nicht mehr hier bei clansphere.


------------------
ClanSphere - professional clan care starts here

Inaktiv
|
duRiel ClanSphere Team


Weltmeister




Herkunft: Cambridge
Beiträge: 7300
# Antwort: 4 - 10.11.2010 um 23:56 Uhr
für coresphere ist das thema allerdings noch heiß.


Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 5 - 11.11.2010 um 00:23 Uhr
2010-11-10 at 10:51 PM - hajo:
das entity decode öffnet gefahren, wenn das substr nach dem cs_secure statt findet, was eigentlich eh nirgends der fall sein sollte, daher klammer ist dies einfach aus. wenn da etwas ungünstig abgeschnitten wird ist halt pech. um dies zu beheben müsste man im ansatz schon im gesamten system noch änderungen durchführen.


Den cs_subst muss man deswegen auch immer VOR cs_secure machen...


Inaktiv
|
hajo ClanSphere Team


VIP - Poster




Herkunft: Barsbüttel
Beiträge: 9411
# Antwort: 6 - 11.11.2010 um 00:39 Uhr
genau das habe ich doch damit gesagt? bzw. dass wenn dies nicht der fall ist man eh nichts dagegen vernünftig tuen kann / sollte. naja die funktion bleibt jetzt erst einmal so, weitere für toupper usw. werden definitiv nicht mehr folgen.


------------------
ClanSphere - professional clan care starts here

Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 7 - 11.11.2010 um 00:45 Uhr
Wieso eine funktion die schuld geben, wenn die funktion nicht richtig eingesetzt wird von coder?
Das was man letztendlich in HTML zeigen will soll cs_secure haben und nicht erst cs_secure und dan noch manipulieren von daten...


Inaktiv
|
hajo ClanSphere Team


VIP - Poster




Herkunft: Barsbüttel
Beiträge: 9411
# Antwort: 8 - 11.11.2010 um 00:56 Uhr
da gebe ich dir recht, aber es ist nicht die aufgabe dieser wordcut funktion, sich mit html eigenheiten auseinanderzusetzen. zumindest hat substr an sich das sonst eh auch nicht getan. bei coresphere wird vieles anders sein, ich beziehe mich hier immer auf clansphere und den aktuell gegebenen stand.


------------------
ClanSphere - professional clan care starts here

Inaktiv
|
SCHIRI ClanSphere Team


Weltmeister



Herkunft: Hamburg
Beiträge: 5299
# Antwort: 9 - 11.11.2010 um 09:22 Uhr
Mal ganz kurz zusammengefasst:

Php kann eigentlich mit utf-8 strings eh gar nicht umgehen, nur merkt man davon nichts, solange man sie nicht manipuliert/analysiert oder innerhalb der ersten 255 zeichen ist, da diese mit ascii identisch sind.
Das liegt daran, dass alle Stringfunktionen Byte-basiert und nicht Zeichen-basiert arbeiten.

Die Multibyte-Erweiterung behebt dieses Problem, steht aber nicht auf allen Server zur Verfügung.
Die einzige Lösung wäre also, für alle Stringfunktionen einen Wrapper zu schreiben, der nach Möglichkeit die mb_-Funktionen nutzt und sonst auf die normalen String-Funktionen zurückfällt.

Wenn dann keine MB-Erweiterung installiert ist, sollte man auch kein utf-8 verwenden, da spätestens beim Kürzen zu Langer Headlines in der Navlist Strings zerhackt werden.

html_entity_decode/encode hat damit aber eigentlich nichts zu tun, da all diese String-Funktionen sowieso immer auf den noch nicht html-izierten String angewendet werden sollten. Das direkt zu automatisieren ist überflüssig und führt ggf noch zu Fehlern.

Noch was vergessen?


------------------
www.laszlokorte.de

Inaktiv
|
Fr33z3m4n ClanSphere Team


Medal of Honor




Herkunft: Hamm
Beiträge: 11094
# Antwort: 10 - 11.11.2010 um 11:54 Uhr
Die einzige Lösung wäre also, für alle Stringfunktionen einen Wrapper zu schreiben, der nach Möglichkeit die mb_-Funktionen nutzt und sonst auf die normalen String-Funktionen zurückfällt.

Wo du da wieder beim Problem mit den Navlisten bist.
Wenn du die mb-Funktionen nicht nutzen kannst, musst du zwangsläufig über utf8-decode arbeiten.


------------------
mfg
Patrick "Fr33z3m4n" Jaskulski

Antoine de Saint-Exupéry: Wenn Du ein Schiff bauen willst, so trommle nicht Männer zusammen, um Holz zu beschaffen, Aufgaben zu verteilen, sondern lehre die Männer die Sehnsucht nach dem endlosen weiten Meer.

Inaktiv
|
SCHIRI ClanSphere Team


Weltmeister



Herkunft: Hamburg
Beiträge: 5299
# Antwort: 11 - 11.11.2010 um 12:08 Uhr
Wo du da wieder beim Problem mit den Navlisten bist.
Wenn du die mb-Funktionen nicht nutzen kannst, musst du zwangsläufig über utf8-decode arbeiten.

Das funktionieert letztendlich doch auch nicht... denn zu welchem Latin-1-Zeichen soll denn bitte z.B. das hier ⋙ decodiert werden? -> Es kann nicht dekodiert werden, da es gar nicht als latin-1 Zeichen gespeichert werden kann und wenn keine Funktion da ist, die erkannt, dass ⋙ nur ein Zeichen lang ist, dann geht das nunmal nicht.

Was habt Ihr denn alle mit den Navlisten? Hab da den Zusammenhang noch nicht verstanden... oder meint Ihr, dass hauptsächlich in den Navlisten Strings gekürzt werden?

Wenn dann keine MB-Erweiterung installiert ist, sollte man auch kein utf-8 verwenden, da spätestens beim Kürzen zu langer Headlines in der Navlist Strings zerhackt werden.


------------------
www.laszlokorte.de

Zuletzt editiert von SCHIRI ClanSphere Team am 11.11.2010 um 12:11 Uhr (3x Editiert)
Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 12 - 11.11.2010 um 13:22 Uhr
@hajo: Du hast mir noch immer nicht den grund genannt wieso du mbstring extension nicht gerne benutzt...

utf8_decode hat wirklich total kein nutzen innerhalb das benutzen von substr...

Und wenn wir ueber substr und navlist reden. Muss man auch labern uber die laenge.

mb_strlen (iconv_strlen), mb_strpos (iconv_strpos) und so.

Die max_headline option in die navlisten ist eigentlich "abkuerzen nach XXX buchstaben/glyphs" und nicht "abkuerzen nach XXX bytes"

mb_substr() macht erstes, substr() macht zweites
mb_strlen() zaehlt anzahl buchstaben, strlen() zaehlt anzahl bytes

Diesen unterschied ist sehr wichtig...

Und fuer die navlisten muessten mann eigentlich auch noch die breite der benutzen fonts/buchstaben wissen, weil:
MMMMMMMMMMMM = 12 x M
aaaaaaaaaaaaaaaa = 16 x a
= gleich breit bei (diesen) proportional font im edit

Auch wichtig, wenn die datenbank sagt varchar(80), dan sind 80 bytes maximum und nicht 80 buchstaben/glyphs.
In varchar(80) passen in durchschnitt vielleicht 30-40 Japanische/Chinesische/Koreanishe glyphs...



Zuletzt editiert von Mindcrime am 11.11.2010 um 13:27 Uhr (3x Editiert)
Inaktiv
|
SCHIRI ClanSphere Team


Weltmeister



Herkunft: Hamburg
Beiträge: 5299
# Antwort: 13 - 11.11.2010 um 13:33 Uhr
Ich denke mal Hajo möchte kein mb_string verwenden, weil es nicht überall installiert ist.

Das mit den Buchstabenbreiten kann man Serverseitig aber eh nicht lösen. Für das kürzen von Zeilen sollte man am besten wohl sowieso css3(text-overflow: ellipsis-word) benutzen.

Die Datenbankfelder muss man natürlich entsprechend vergrößern, wenn man 80 chinesische Zeichen erlauben möchte.


------------------
www.laszlokorte.de

Inaktiv
|
Mindcrime
Thread-Ersteller


Geekboy





Beiträge: 1155
# Antwort: 14 - 11.11.2010 um 14:23 Uhr
Naja, man sollte mb_strlen / iconv_strlen (wenn vorhanden) auf jeden benutzen, da wo es zweck hat...

Klar ist das font breite ein etwas schwieriger zu loesen problem.

Ob man die felder vergroessen muesste weiss ich nicht, glaub 30 chinesische zeichen sagen durchaus mehr wie 30 buchstaben.
Es ist nur etwas wo man immer ueber nachdenken muss das 1 byte nicht immer 1 buchstabe bedeutet...


Inaktiv
|
hajo ClanSphere Team


VIP - Poster




Herkunft: Barsbüttel
Beiträge: 9411
# Antwort: 15 - 11.11.2010 um 20:41 Uhr
das problem bzw. diese probleme hat man allerdings in fast allen programmiersprachen, selbst bei den typsicheren. am ende fällt eben sehr viel auf die software ab, die sich dann mit den ganzen zeichensatz-sachen beschäftigen muss. wiegesagt ist dies bei clansphere großteils einfach unberücksichtigt und es macht jetzt nachträglich nurnoch wenig sinn, da alles einmal umzustellen.

mbstring ist einfach nicht standardmäßig mit php aktiviert, iconv schon und zu 90% verwendet man von diesen funktionen eh nur das substr oder strpos.


------------------
ClanSphere - professional clan care starts here

Inaktiv
|
Tress13


Highlander




Herkunft: Lüdenscheid
Beiträge: 3048
# Antwort: 16 - 27.09.2014 um 15:16 Uhr
10.11.2010 um 23:56 Uhr - duRiel:
für coresphere ist das thema allerdings noch heiß.


Ist das Thema denn für cSphere jetzt gelöst?


------------------


www.iv-gaming.de | www.iv-artwork.de

Inaktiv
|
Antworten: 16
Seite [1]


Sie müssen sich registrieren, um zu antworten.


ClanSphere Project - Mailus - Imprint - Disclaimer - Scriptinfo