Zurück   klamm-Forum > klamm.de > klamm talk > Bug-Report

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10.11.2009, 15:26:27   #1 (permalink)
abgemeldet

Reg: 02.05.2006
Beiträge: 9.117
Standard SMS Archiv

Im SMS Archiv haben die versendeten SMS keine Zeilenumbrüche, der komplette Text ist in einer Zeile und läuft sogar außerhalb vom Content weiter bis ins Menü.

Im Menü lassen sich dann auch keine Links mehr klicken, weil der Text darüber liegt Oo

Insgesamt sieht das sehr seltsam aus, und ist bestimmt auch nicht so gewollt

*edit*
Liegt aber wohl an einer SMS die ich verschickt habe, komplett ohne Leerzeichen wordwrap() könnte man da noch einsetzen ^^
 
27o8 ist offline   Mit Zitat antworten
Alt 10.11.2009, 21:33:35   #2 (permalink)
Administrator
Benutzerbild von klamm

ID: 20876
Lose-Remote

Reg: 20.04.2006
Beiträge: 11.015
Standard

wordwrap() ist insofern doof, als dass das nach X strikt zeichen umbricht, aber nicht berücksichtigt, dass der text an sich vorher auch schon vllt. von selbst umgebrochen ist. oder hab ich was übersehen? man bräuchte sowas:
PHP-Code:
1:
if(letzter_umbruch_liegt_mehr_als_x_zeichen_zurückforce_umbruch() 
 
klamm ist offline   Mit Zitat antworten
Alt 12.11.2009, 13:24:21   #3 (permalink)
abgemeldet

Reg: 02.05.2006
Beiträge: 9.117
Standard

Also ich nutze folgende Funktion welche ich mal im Web gefunden habe:

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
function breakLongWords($str$maxLength$char){
    
$wordEndChars = array(" ""\n""\r""\f""\v""\0");
    
$count 0;
    
$newStr "";
    
$openTag false;
    for(
$i=0$i<strlen($str); $i++){
        
$newStr .= $str{$i};   
       
        if(
$str{$i} == "<"){
            
$openTag true;
            continue;
        }
        if((
$openTag) && ($str{$i} == ">")){
            
$openTag false;
            continue;
        }
       
        if(!
$openTag){
            if(!
in_array($str{$i}, $wordEndChars)){//If not word ending char
                
$count++;
                if(
$count==$maxLength){//if current word max length is reached
                    
$newStr .= $char;//insert word break char
                    
$count 0;
                }
            }else{
//Else char is word ending, reset word char count
                    
$count 0;
            }
        }
       
    }
//End for   
    
return $newStr;
}

// Beispiel
breakLongWords($message,17,'<br/>'
Denke mal damit dürfte es auch "schön" gehen, wobei ich das genutzt habe um geöffnete HTML Tags nicht zu unterbrechen, aber kannst du ja hier - ggf. leicht modifiziert - auch einsetzen
 
27o8 ist offline Threadstarter   Mit Zitat antworten
Alt 12.11.2009, 14:30:13   #4 (permalink)
Administrator
Benutzerbild von klamm

ID: 20876
Lose-Remote

Reg: 20.04.2006
Beiträge: 11.015
Standard

Schon eher das was wir brauchen. Wir wollen ja nicht nach X Zeichen breaken, sondern quasi nur "böse lange Wörter" unschädlich machen. Ich finde eine Lösung mit <wbr> recht nice, weil das keine Spaces added (jaja denglisch). Weiß nur nicht, ob sich alle Browser dran halten. ("break here if you want ...").
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
function fWrap $vText$vMax ) { 
    
$vWords explode(" "$vText); 
    foreach ( 
$vWords as $i =>$w ) { 
        if ( 
strlen $vWords[$i] ) > $vMax ) { $vWords[$i] = wordwrap$vWords[$i], $vMax"<wbr>"); } 
    } 
    return 
implode(" "$vWords); 

 
klamm ist offline   Mit Zitat antworten
Alt 12.11.2009, 14:51:55   #5 (permalink)
Administrator
Benutzerbild von klamm

ID: 20876
Lose-Remote

Reg: 20.04.2006
Beiträge: 11.015
Standard

Hier mein Improvement, dass HTML-Tags nicht gebreakt werden.
Ist drin und scheint in allen gängigen Browsern zu funzen.
Gegenteiliges bitte melden!

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
// insert spaces in long words to allow wrap
    // take care of html-tags
    
function fWrap $vText$vMax ) { 
       foreach(
explode(" "strip_tags($vText)) as $key => $line){
            if(
strlen($line) > $vMax$vText str_replace($linewordwrap($line$vMax" "1), $vText);
        }
        return 
$vText;
    } 
Edit: IE und Opera können <wbr> natürlich nicht. -.-
Dann halt mit Space ...

@Coder
Man könnte dieses Wort-Array auch vorher auf Duplikate filtern, oder? Es werden ja beim 1. Mal dann schon alle Vorkommen ersetzt. Ist aber wahsrcheinlich aufwändiger, als evtl. 1-2. unnötige str_replace() mehr.
 
klamm ist offline   Mit Zitat antworten
Alt 12.11.2009, 16:21:10   #6 (permalink)
abgemeldet

Reg: 02.05.2006
Beiträge: 9.117
Daumen hoch

Zitat:
Hier mein Improvement, dass HTML-Tags nicht gebreakt werden.
HTML-Code:
1:
<a href="http://www.eine-ganz-ganz-lange-url.com/und-noch-ein-langer-pfad/bis-zur-datei.endung">Link</a>
Das müsste doch theoretisch auch gebreakt werden. Wird zwar in einer SMS nicht vorkommen, aber ggf. an anderen Stellen wo du das noch einsetzen könntest.

*edit*
Sieht übrigens wieder schön aus (im FF)
 
27o8 ist offline Threadstarter   Mit Zitat antworten
Alt 13.11.2009, 09:46:09   #7 (permalink)
Administrator
Benutzerbild von klamm

ID: 20876
Lose-Remote

Reg: 20.04.2006
Beiträge: 11.015
Standard

Zitat:
Zitat von Gremlin Beitrag anzeigen
HTML-Code:
1:
<a href="http://www.eine-ganz-ganz-lange-url.com/und-noch-ein-langer-pfad/bis-zur-datei.endung">Link</a>
Das müsste doch theoretisch auch gebreakt werden
Nein, denn das Innere des Tags wird ja nicht dargestellt. Ob das im Quelltext lang ist, ist ja wurscht ... oder meinst Du was anderes?
 
klamm ist offline   Mit Zitat antworten
Alt 13.11.2009, 13:54:06   #8 (permalink)
abgemeldet

Reg: 02.05.2006
Beiträge: 9.117
Standard

Ja das wird nicht angezeigt, aber es würde dann z.B. innerhalb vom href Attribut einen Zeilenumbruch geben, denn es wird ja der String als ganzes genommen, und nicht geprüft ob das nun nur "Code" oder auch "Ausgabe" ist.
 
27o8 ist offline Threadstarter   Mit Zitat antworten
Alt 13.11.2009, 14:48:23   #9 (permalink)
Administrator
Benutzerbild von klamm

ID: 20876
Lose-Remote

Reg: 20.04.2006
Beiträge: 11.015
Standard

Schau Dir nochmal den Code an
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
// insert spaces in long words to allow wrap
    // take care of html-tags
    
function fWrap $vText$vMax ) { 
       foreach(
explode(" "strip_tags($vText)) as $key => $line){
            if(
strlen($line) > $vMax$vText str_replace($linewordwrap($line$vMax" "1), $vText);
        }
        return 
$vText;
    } 
Ich mache strip_tags() und ziehe nur die Wörter in betracht, die danach noch übrig sind. Die ersetze ich dann per str_replace. Sollte also HTML-secure sein.

Edit: Worst case:
HTML-Code:
1:
<a href="laaaaaaaaaaaaaaaaaaaaang">laaaaaaaaaaaaaaaaaaaang</a>
Da das str_replace() ja auf den Urtext angewendet wird, würde in diesem Fall auch der Link an sich ersetzt werden, weil es das gleiche Wort ist wie das lange ... aber sowas kommt imho nie vor. Man könnte Den Urtext auch in Code-Stückchen und Wörter-Stückchen zerlegen, die Wörter dann einzeln ersetzen und danach wieder mit den Code-Stückchen joinen. Ist aber wesentlich aufwändiger zu coden.
 
klamm ist offline   Mit Zitat antworten
Alt 13.11.2009, 14:54:00   #10 (permalink)
abgemeldet

Reg: 02.05.2006
Beiträge: 9.117
Standard

natürlich hatte ich übersehen. Darf ich die Funktion auch nutzen? Gefällt mir ^^
 
27o8 ist offline Threadstarter   Mit Zitat antworten
Alt 13.11.2009, 14:57:30   #11 (permalink)
Administrator
Benutzerbild von klamm

ID: 20876
Lose-Remote

Reg: 20.04.2006
Beiträge: 11.015
Standard

Klar kannste nutzen. Aber siehe mein Edit. GANZ sauber ist das nicht ... tut aber. Ich hasse so Fälle, die so gut wie NIE vorkommen aber WENN dann gehts kaputt. Dann bastel ich meist ne Woche dran rum - nur um ein Stück quasi-toten Code zu produzieren. Beruhigt halt das Gewissen dann, mehr nicht.
 
klamm ist offline   Mit Zitat antworten
Alt 19.11.2009, 12:02:02   #12 (permalink)
Erfahrener Benutzer
Benutzerbild von FeelGoodInc.

ID: 88293
Lose-Remote

FeelGoodInc. eine Nachricht über MSN schicken
Reg: 04.05.2006
Beiträge: 9.771
Standard

Ich hab gerade noch was beim SMS Archiv bemerkt
Zitat:
Freischaltcode für Absenderkennung<br><span class="brown">+meineNummer</span> angefordert.
Folgender Textinhalt scheint mir nicht beabsichtigt zu sein
Superslots
It's nice to be a Preiß, but it's higher to be a Bayer
SUCHE IMMER SUPERSLOTS REFS
FeelGoodInc. ist offline   Mit Zitat antworten
Alt 19.11.2009, 12:13:04   #13 (permalink)
Administrator
Benutzerbild von klamm

ID: 20876
Lose-Remote

Reg: 20.04.2006
Beiträge: 11.015
Standard

fixed
 
klamm ist offline   Mit Zitat antworten
Alt 26.11.2009, 15:15:33   #14 (permalink)
Primus inter pares
Benutzerbild von DaPhreak

ID: 30143
Lose-Remote

DaPhreak eine Nachricht über ICQ schicken
Reg: 08.05.2006
Beiträge: 2.291
Standard

Wenn ich das richtig verstehe, wird der Code nicht nur im SMS-Archiv verwendet sondern auch bei Kommentaren, ist das richtig? Das ist jedenfalls der Grund warum ich es hier reinposte.

Es tritt ein unschöner Effekt auf wenn man ein langes Wort und danach ein Anführungszeichen hat. Das wird in die Entity &quot; umgewandelt und selbige kann dann unterbrochen werden. Dann wird sie natürlich nicht mehr umgewandelt und das sieht ganz doof aus.

Beispiel: Mönchhofstraße!" Mönchhofstraße!&quo t;

Falls hier falsch dann sorry, ein "Bug" ist es trotzdem.


P.S.: Man dankt für den Prem-GS!
"There is nothing noble in being superior to your fellow man. True nobility is being superior to your former self." - Ernest Hemingway
DaPhreak ist offline   Mit Zitat antworten
Alt 26.11.2009, 15:25:26   #15 (permalink)
Administrator
Benutzerbild von klamm

ID: 20876
Lose-Remote

Reg: 20.04.2006
Beiträge: 11.015
Standard

Jap ist ein Bug.

Ich muss das Spacer-Ding zuerst anwenden und danach Entities.
Wird gefixt.
 
klamm ist offline   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
News-Archiv Drrichardfahrer Bug-Report 1 28.04.2009 10:14:18
RAR: Archiv packen deniz Webhosting 5 25.02.2009 10:11:36
250 000 Lose pro Archiv DadyCool Lose4Action 3 15.07.2008 23:24:54
[S] Gif Archiv + Smily Archiv birwac66 Lose4Scripts (erledigt) 4 14.10.2006 11:16:14
[v] EF-Transaktionslisten Archiv andinator Lose4Scripts (erledigt) 8 16.09.2006 18:32:36


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46:36 Uhr.