anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Di 19 Mär, 2024 04:51

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
BeitragVerfasst: Mo 25 Jun, 2018 14:36 
Offline
Lehrling
Lehrling

Registriert: So 12 Mär, 2017 03:00
Beiträge: 25
Okay, ich werd mir also einen Kaffee genehmigen und nochmal drübergehen. :D
Und ja, die komplette Änderung wird nicht übernommen. Man hängt quasi mit der Vorschau fest, weil man angeblich einen falschen Namen eingegeben hätte. Außer, man lässt die Sonderzeichen weg. Dann funktionierts seltsamerweise.

Screenshot gibt es hier

Und was den Page-header in der Bio betrifft: Der Fehler betrifft derzeit nur einen User, weil er Sonderzeichen in der Farbgebung seines Titels hat. Vergeben wurde der durch mich in der Grotte. Sehen tun wir aber alle "Denkt an �Br�uc�hp�ilot Hoél Yvans".


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo 25 Jun, 2018 18:19 
Offline
Großmeister
Großmeister

Registriert: Fr 01 Jul, 2005 18:41
Beiträge: 484
Wohnort: Saarbrücken
Geschlecht: Männlich
bio.php

PHP:
page_header("Denkt an ".preg_replace("/[`][".$appoencode_str."]/","",$row[name]));


ersetze mit:

PHP:
page_header("Denkt an ".$row['name']." ");


Zur Lodge:

Gib Demras im Spiel mal bitte Donationspoints ( genügend! ) damit ich mal was probieren kann. Vom Code an sich seh ich jetzt keinen Fehler.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo 25 Jun, 2018 21:32 
Offline
Lehrling
Lehrling

Registriert: So 12 Mär, 2017 03:00
Beiträge: 25
Mit der Änderung wird nun das ausgeworfen: Denkt an `ùBr`óuc`áhp`Àil`[o`Tt H`Aoé`yl Yvans
:/

Aber an DPs soll es Demras jetzt nicht mangeln. :D


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di 26 Jun, 2018 08:37 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Waldmonster hat geschrieben:
Okay, ich werd mir also einen Kaffee genehmigen und nochmal drübergehen. :D
Und ja, die komplette Änderung wird nicht übernommen. Man hängt quasi mit der Vorschau fest, weil man angeblich einen falschen Namen eingegeben hätte. Außer, man lässt die Sonderzeichen weg. Dann funktionierts seltsamerweise.

Screenshot gibt es hier

Und was den Page-header in der Bio betrifft: Der Fehler betrifft derzeit nur einen User, weil er Sonderzeichen in der Farbgebung seines Titels hat. Vergeben wurde der durch mich in der Grotte. Sehen tun wir aber alle "Denkt an �Br�uc�hp�ilot Hoél Yvans".


Ah, die Information war gut.

logde.php, die folgenden Zeilen:

$this->bbcode_second_pass_code('', '
$comp1 = strtolower(preg_replace("/[`][".$appoencode_str."]/","",$regname)); // no black, no background colors
$comp2 = strtolower(preg_replace("/[`][".$appoencode_str."]/","",$_POST['newname']));
')

preg_replace ersetzt alle Farbcodes - spezifischer, er setzt das Byte für ` und das darauf folgende (byte). Bei multi-byte-Zeichen würde nur das erste Byte ersetzt werden... Probier mal:

$this->bbcode_second_pass_code('', '
$comp1 = strtolower(preg_replace("/[`][".$appoencode_str."]/u", "", $regname)); // no black, no background colors
$comp2 = strtolower(preg_replace("/[`][".$appoencode_str."]/u", "", $_POST['newname']));
')

Für den page_header probier das hier:

$this->bbcode_second_pass_code('', '
page_header("Denkt an ".preg_replace("/[`][".$appoencode_str."]/u", "", $row['name']));
')

Edit: Den Ersatz-Code etwas verschönert.


Zuletzt geändert von Eliwood am Di 26 Jun, 2018 14:35, insgesamt 1-mal geändert.
Rechtschreib-Korrektur


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di 26 Jun, 2018 14:33 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
(Bitte diesen Post ignorieren).


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di 26 Jun, 2018 15:11 
Offline
Lehrling
Lehrling

Registriert: So 12 Mär, 2017 03:00
Beiträge: 25
Funktioniert beides wunderbar. Ich hatte ja schon ein wenig die Hoffnung aufgegeben.
Danke!
Aber was macht das u denn konkret in diesem Fall? Also wofür steht das, wenn ich so dreist fragen darf?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di 26 Jun, 2018 16:36 
Offline
Großmeister
Großmeister

Registriert: Fr 01 Jul, 2005 18:41
Beiträge: 484
Wohnort: Saarbrücken
Geschlecht: Männlich
Korrigier mich wenn ich falsch liege Eli.

@Waldmonster

Der Lösungsansatz von Eli behandelt Suchmuster und durchsuchte Zeichenkette als UTF-8.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 28 Jun, 2018 19:06 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Exakt.

Das Problem ist, dass die Dateien als UTF-8 gespeichert sind. Das heisst, ein "ä" besteht nun aus 2 Bytes: "C3 A4". Um alle (gültigen) Farbcodes aus einem Namen zu streichen, verwendet LotGD eine regular expression. Im folgenden Code-Zitat ist $appoencode_str eigentlich nichts mehr als eine Liste aller Farbcodes ohne Apastroph:

$this->bbcode_second_pass_code('', 'preg_replace("/[`][".$appoencode_str."]/", "", $regname)')

Angenommen, der einzige Farbcode wäre `ä, würde die Ausgabe von $appoencode_str nichts besonderes anzeigen und das Stück Code wird zu:

$this->bbcode_second_pass_code('', 'preg_replace("/[`][ä]/", "", $regname)')

Was man allerdings nicht sieht, ist die Codierung. In Bytes geschrieben, würde das so aussehen:

$this->bbcode_second_pass_code('', 'preg_replace("/[`][\xC3\xA4]/", "", $regname)')

Standardgemäss behandelt preg_replace den String aber nicht als utf8. (Okay, eigentlich behandelt keine Funktion < PHP7 utf8 string als solche, ausser, man notiert es explizit. Und nicht alle Funktionen unterstützen das. strlen("ä") gibt zum Beispiel eine Länge von 2 an, mb_strlen("ä") eine von 1.) Für die RegExp schaut es so aus, als ob das 2 Farbcodes sind! Je nach Konfiguration (bzw je nach Zeichentabelle) ist der folgende Code eigentlich zutreffender (in dem Fall, ISO 8859-1):

$this->bbcode_second_pass_code('', 'preg_replace("/[`][ä]/", "", $regname)')

Das heisst, die RegExp erkennt hier 2 Farbtags: `Ã (Vergleich das mit deinem ersten Screenshot vom Originalpost - fällt dir auf, dass du viele Farbcodes mit dem Zeichen hast? Jetzt weisst du warum!) und `¤. Aber keinen Farbtag `ä!

Der RegExp-Modifier "u" aktiviert "utf8-Verständnis" seitens der RegExp-Engine. Der RegExp versteht nun, dass C3A4 ein einziges Zeichen ist: ä, und ersetzt es dementsprechend auch richtig.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So 01 Jul, 2018 03:40 
Offline
Lehrling
Lehrling

Registriert: So 12 Mär, 2017 03:00
Beiträge: 25
Aaaah! Jetzt macht das auch Sinn.
Vielen lieben Dank an euch beiden! :)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So 09 Jun, 2019 16:55 
Offline
Lehrling
Lehrling

Registriert: So 12 Mär, 2017 03:00
Beiträge: 25
Hallo,

ich schon wieder. :roll:
Ich hab den Hoster gewechselt und habe nun das uncharmante Problem, dass ich bei der php.ini nur sehr wenig einstellen kann. Auch ein Gespräch mit dem Support, ob man mbstring.func_overload nicht anpassen könnte, brachte nur ein "Sorry, das geht bei uns nicht!"
Ich hab also wieder munteren Zeichensalat.
Gibt es denn eine Möglichkeit, Sonderzeichen wie â als Farbcode zu verwenden, ohne an der php.ini etwas anzupassen?

Liebste Grüße,

Waldmonster


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di 11 Jun, 2019 12:03 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 01 Sep, 2008 10:29
Beiträge: 118
Wohnort: Niedersachsen
Geschlecht: Männlich
LoGD: https://www.sotbd.de/about.php?op=source
Ja gibt es ...
mbstring.func_overload war eine Möglichkeit schnell Ergebnisse zu erzielen, in meinen Augen aber auch eine ungemein unsaubere eher was für die "faulen" (das soll kein Angriff sein ;))
Mittlerweile ist diese Einstellung auch als veraltet markiert und dürfte in künftigen Versionen von php entfernt werden.
Die Lösung des Problems ist daher denkbar einfach, dass was einem diese Einstellung abgenommen hat nämlich selbst durchzuführen, soll heißen, ALLE Dateien durchsuchen und die Funktionsaufrufe manuell ersetzen. Klingt erstmal nach einem Haufen Arbeit, aber mittels moderner Editoren und Suchen&Ersetzen Funktionen auch schnell erledigt.

Auszug aus der Dokumentation:
mail() -> mb_send_mail()
strlen() -> mb_strlen()
strpos() -> mb_strpos()
strrpos() -> mb_strrpos()
substr() -> mb_substr()
strtolower() -> mb_strtolower()
strtoupper() -> mb_strtoupper()
stripos() -> mb_stripos()
strripos() -> mb_strripos()
strstr() -> mb_strstr()
stristr() -> mb_stristr()
strrchr() -> mb_strrchr()
substr_count() -> mb_substr_count()
ereg() -> mb_ereg()
eregi() -> mb_eregi()
ereg_replace() -> mb_ereg_replace()
eregi_replace() -> mb_eregi_replace()
split() -> mb_split()


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di 11 Jun, 2019 14:14 
Offline
Lehrling
Lehrling

Registriert: So 12 Mär, 2017 03:00
Beiträge: 25
Okay, dann setz ich mich mal heute Abend dran. :)
Dankeschön!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 26 Jun, 2019 16:50 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Shaddar hat geschrieben:
Ja gibt es ...
mbstring.func_overload war eine Möglichkeit schnell Ergebnisse zu erzielen, in meinen Augen aber auch eine ungemein unsaubere eher was für die "faulen" (das soll kein Angriff sein ;))


Korrekterweise muss an dieser Stelle erwähnt werden, dass das planlose ersetzen von den Funktionen sogar zu unvorhergesehenen Ergebnissen führen kann. strlen() ist noch immer eine super Funktion, um die Byte-Länge eines Strings zu messen - während mb_strlen() die Länge in Zeichen misst. Das kann zum Problem werden, wenn eigentliche Binärdaten (In PHP sind das auch Strings) modifiziert werden sollten. LoGD macht das zum Glück nicht. Einzig bei compress_out bin ich mir nicht ganz sicher.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 26 Jun, 2019 17:00 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Und als endgültige Ergänzung: Man kann die Funktion auch manuell (auf die Datei limitiert) "aliasen":

$this->bbcode_second_pass_code('', '
<?php

use function \mb_strlen as strlen;

var_dump(strlen("Hallö"), \strlen("Hallö"));
')

Ausgabe:

$this->bbcode_second_pass_code('', '
php test.php
test.php:5:
int(5)
test.php:5:
int(6)
')

Mit "use function" kann man bestehende Funktionen maskieren, solange sie nicht mit einem \ geschrieben sind. Im oberen code ist strlen ein Alias for mb_strlen, und \strlen ist das eigentliche strlen ...


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum