- Affected App
- WoltLab Suite Core
hi,
ich hab ein kleines problem.
das ist mein code:
<?php
include './global.php';
$str = 'Voraussetzung: <a href="" class="newsPreview" data-test=""></a>
(Versteckter Text)
Dies ist ein text, dieser text sollte nicht sichtbar sein, dies ist ein test
Dies ist ein text, dieser text sollte nicht sichtbar sein, dies ist ein test
Dies ist ein text, dieser text sollte nicht sichtbar sein, dies ist ein test';
echo \wcf\util\StringUtil::truncateHTML($str, 50);
Display More
leider funktioniert er nicht.
truncatehtml kürzt es nicht.
wenn ich jedoch data-test in data umändere (html attribut), dann funktioniert es.
ich hab da rumgeschnitten und rumprobiert und bin dann zu dem ergebnis gekommen, dass es mit dem a-tag zutun hat.
hier seht ihr einen live-beispiel:
https://coderz.pro/ (dashboard), dort sollte ein eintrag sein: Hat das Tutorial Dieselben Gäste gruppieren im WCF2 geschrieben.
das tutorialsystem ist auf 200 zeichen begrenzt (sieht man auch gleich dadrunter), aber hier werden mehr als das 10fache angezeigt.
falls ich was neues bemerke kann ich ja berichten.
grüße
edit:
scheiße, bei vorschläge gepostet, statt bei fehler
edit2:
ich hab keinen plan wieso (irgendwelche kodierungen vielleicht?), aber wenn ich die benötigten methoden von stringutil als function in die datei einbaue, dann funktioniert die funktion, die methode funktioniert jedoch nicht.
siehe anhang.
edit3:
ok ich bin doof, ich hab die funktion nicht komplett kopiert, deshalb funktioniert sie.
also der fehler liegt bei stripHtml
denn diese bedingung:
if (mb_strlen(self::stripHTML($string)) <= $length) { return $string; }
wird ausgeführt, obwohl sie es nicht tuen sollte.
wahrscheinlich ist der pattern falsch (HTML_PATTERN)
edit4:
übrigens, grad getestet, wenn man es ganz einfach hält:
const HTML_PATTERN = '~<\/?[^>]+>~';
funktioniert es
edit5:
dank @TimWolla weiß ich, dass es an den Minus liegt.
das hier behebt es:
const HTML_PATTERN = '~</?[a-z]+[1-6]?
(?:\s*[a-z-]+\s*(=\s*(?:
"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|[^\s>]
))?)*\s*/?>~ix';
trotzdem frag ich mich, wieso es so kompliziert sein muss, wenn es einfach geht.