Smileyersetzung innerhalb von Tags


  • Mod

    Bei den Codetags ist das ja sinnvollerweise abgeschaltet, aber mir fällt gerade auf, dass die Smileys innerhalb einiger Tags ersetzt werden, bei denen dies keinen Sinn macht, weil man in diesen Tags keinen gewöhnlichen Text setzt:
    Courier: :) (wird normalerweise als inline-Codetag benutzt)
    Latex: :)🙂
    HTML Entity: &:); (klar, es gibt keine Entity mit Klammern, aber es macht trotzdem keinen Sinn, in diesen Tags etwas zu ersetzen)
    Man: man: 🙂)
    Google: Google: 🙂)
    MSDN: Google: site:msdn.microsoft.com 🙂)
    URL: [url] 🙂 [/url]


  • Administrator

    Ist bekannt. Lässt sich wahrscheinlich aber nicht so einfach beheben oder allenfalls nur teilweise. Dass es im Code keine Smileys hat ist bereits ein ziemlicher Workaround. Die Smiley-Engine von PhpBB2 ist recht dümmlich. Da wird einfach nur eine Ersetzung über den ganzen bereits formatierten Beitrag laufen gelassen, wobei alle Smiley-Strings durch entsprechende Bilder ersetzt werden. Toll, nicht?

    Grüssli



  • Wie wäre es, vorerst Smilies in Beiträgen zu deaktivieren in denen man solche Probleme hat?
    Dann kann man über folgendes nachdenken: Zwischen jeden : und ) die unmittelbar oder nur durch Whitespaces getrennt sind, fügt man ein extra Leerzeichen ein. Und nach dem kompletten PhPBB2-Modul, dass da drüberläuft, löscht man wieder dieses Leerzeichen weg. Das alles natürlich nur zwischen den Tags.

    Geht das? Oder ersetzt PhpBB2 die Smilies schon zu "spät"?


  • Administrator

    Sone schrieb:

    PhPBB2-Modul

    Modul? Du hast eindeutig noch nie PhpBB2 Code gesehen, sonst würdest du kein so innovatives und fortschrittliches Buzzwort verwenden 😉

    Zu deinem Lösungsvorschlag:
    Das geht wohl eher nicht. Denn wie erkennt man, welche Leerzeichen man wieder rauslöschen soll? Und welche dieser Leerzeichen waren vom Benutzer gewollt? So wie PhpBB2 aufgebaut ist, wäre das ein riesiger Aufwand, ausser ich übersehe jetzt etwas offensichtliches.

    Das einzige was ich mir überlegen würde, ist den Workaround beim Code-Tag auf andere Tags zu transportieren. Wir ersetzen gewisse Zeichen aktuell durch ihre HTML Entities, wodurch der Smily-Code den Text nicht als Smily erkennt, der Browser dann aber die Konvertierung zurück machen kann. Wenn du z.B. den Source Code dieser Seite anschaust, siehst du was ich meine:

    LabelNachdemManImSourceSuchenKann :)
    

    Man müsste schauen, wo man dies ebenfalls anwenden kann und wie viel Aufwand es bedeuten würde.

    Grüssli



  • Dravere schrieb:

    ausser ich übersehe jetzt etwas offensichtliches.

    Jup, das tust du. Warte, ich erkläre es nochmal.

    Aber mit C++. Tada:

    #include <iostream>
    #include <string>
    
    int main ()
    {
        std::string str;
        std::getline(std::cin, str);
    
        std::string::size_type pos = str.find(')');
        while( pos != std::string::npos )
        {
            str.insert( pos, 1, ' ' );
            pos = str.find( ')', pos + 2 );
        }
    
        std::cout << "Vor Bearbeitung: " << str << '\n';
    
        pos = 0;
        while( (pos = str.find(')', pos)) != std::string::npos )
                str.erase(pos - 1, 1);
    
        std::cout << "Und danach:      " << str;
    }
    

    Gib ein was du willst, aber danach ist es wieder dasselbe wie deine Eingabe. Der Unterschied ist: Kommt nach dem Bearbeiten PhpBB2 ran, findet es keinen :)-Smilie in deinem String.

    Du hast eindeutig noch nie PhpBB2 Code gesehen

    Na klar! Das war jetzt ein ganz pauschaler Vorschlag, ganz, ganz pauschal. 😃


  • Administrator

    Du vergisst aber, was ich im ersten Beitrag erwähnt habe. Smilies-Ersetzung wird über den vollendeten ganzen Beitrag laufen gelassen. Mit deiner Methode deaktivierst du alle Smilies.

    Und alle Bereiche in den Tags werden zuvor komplett ersetzt. Es ist dann unmittelbar vor der Smiley-Ersetzung nicht mehr klar, wo die Tags anfingen und aufhörten, bzw. nur noch schwer definierbar.

    Grüssli


Log in to reply