błąd parsowania tytułu wątku

0

Wątek http://4programmers.net/Forum/214551 Każdy może zobaczyć jaki ma tytuł. A tak to wygląda na stronie głownej forum (dział c/cpp/java): http://zshe.int.pl/~flabra/coyote-zonk.png (&qout...)

0

Chodzi o to, że temat jest ucinany do wyświetlenia. Cały zaś leci do parametru title. Z tego samego powodu czasem są krzaki na końcu, jak tylko 1 bajt z 2 reprezentujący polski znak zmieści się w obcinanej części.

0
Marooned napisał(a)

(...) czasem są krzaki na końcu, jak tylko 1 bajt z 2 reprezentujący polski znak zmieści się w obcinanej części.

a co za problem w functions.php zamiast:

  $costam=substr($cos,0,30-costam);

wpisać:

  $costam=iconv_substr($cos,0,30-costam,"UTF-8");

i już jest 10 znaków z kodowania UTF ucięte a nie "rozkodowanych" 10 znaków, a jeszcze przed tym zamienić & quote i tego typu na odpowiednie znaki,np:

<?php $costam=kode(iconv_substr(dekode($cos),0,30-costam,"UTF-8")); ?>

gdzie kode to funkcja zamieniająca np " na & quote ; a dekode odwrotnie

a jak nie ma funkcji iconv_substr a jest biblioteka iconv to zmienić kodowanie przed ucięciem na ISO np a za chwilę zamienić z powrotem - a jak nie ma funkcji iconv w co wątpie bo jest zdaje się wykorzystana w paru miejscach w coyote (albo była) to napisać samemu zmiane kodowania - bo to naprawdę głupio wygląda - czasem wygląda jakby się wchodziło na stronę jakiegoś lamera co nie umie kodowania dobrze ustawić :/

0

Adamo - czy ty rozumiesz o co chodzi?
do tego pola pobierane są dane z bazy, ale tylko pierwsze znaki, jak utnie 1 bajt (UTF-8 jest kodowane w 2 bajtach) to ci sie pokaze krzak. nie poprawisz tego.
druga sprawa - & q u o t e ; to jest &, wiec się samo zamienia (w przeglądarce), ale z bazy zostało wyciągnięte to bez ";", więc samego &quote przeglądarka nie pokaże ci jako &.

Mam nadzieje że mój post został zrozumiany.

btw. już kiedyś ten temat poruszałem
http://4programmers.net/coyote/bug.php?id=43

0
nav napisał(a)

Adamo - czy ty rozumiesz o co chodzi?
do tego pola pobierane są dane z bazy, ale tylko pierwsze znaki, jak utnie 1 bajt (UTF-8 jest kodowane w 2 bajtach) to ci sie pokaze krzak. nie poprawisz tego.
druga sprawa - & q u o t e ; to jest &, wiec się samo zamienia (w przeglądarce), ale z bazy zostało wyciągnięte to bez ";", więc samego &quote przeglądarka nie pokaże ci jako &.

Mam nadzieje że mój post został zrozumiany.

btw. już kiedyś ten temat poruszałem
http://4programmers.net/coyote/bug.php?id=43

No chyba ty w ogóle nie rozumiesz o co mi chodzi. Na wersji coyote'a co mam lokalnie wyciągany jest cały topic (z bazy danych) i wsadzany do "title" a część ucinana już przez PHP (funkcją substr którą można zastąpić jak napisałem wcześniej - iconv_substr) - po wyjęciu z bazy więc jak najbardziej chyba ty nie zrozumiałeś co ja napisałem albo w aktualnej wersji jest jakoś inaczej, a & quote jeszcze pokaże bez średnika na niektórych przeglądarkach, nie pokaże dopiero bez e - chodzi mi o to aby przy ucinaniu - przed ucięciem zamienić znaki & quote; (7 znaków) na " - (1 znak) - wtedy utnie dobrze - potraktuje jako jeden znak i po tym zamienić z powrotem (po ucięciu odpowiedniej części) na & quote; aby nie było konfliktów cudzysłowów między innymi.

Z tego co ty mówisz to wyciągany jest najpierw cały topic - a potem drugi raz odwołanie do tego samego pola z tym że tym razem wyciągnięcie tylko pierwszych n znaków - ja nie wiem czy takie coś jest możliwe bo bazy danych znam tylko na poziomie bardzo podstawowym i tyle mi wystarcza - ale z uszanowaniem do wydajności mySQL to chyba to by nie było wydajniejsze niż wyciągnięcie całego pola, a potem ucięcie przez PHP - poza tym skoro polskie znaki są w UTF już w bazie danych to jakby dać zapytanie (nie wiem czy możliwe - ale raczej) o pierwsze 10 znaków to mySQL chyba nie jest taki głupi że utnie znak w kodowaniu UTF na pół ?

Mam nadzieje że mój post został (tym razem) zrozumiany.

Adam Boduch napisał(a)

Nie ma mozliwosci sprawdzenia, czy ostatnie znakie to akurat < (chyba, ze regexp), wiec nie warto IMHO sie tym przejmowac.

No, chyba, ze znasz prosty sposob aby to poprawic, wtedy dodamy do projektu.

no to właśnie mi się wydaje proste rozwiązanie - nawet jak nie zgodne z coyote to można by coś jeszcze przeprawić żeby to działało - jeśli naprawdę z bazy wyciągane są pierwsze znaki a nie całe pole. BTW To mi się wydaje że wszyscy próbujecie znaleźć rozwiązanie żeby najpierw uciąć znaki a dopiero po ucięciu zrobić żeby było cacy zamiast odwrotnie.

0
Adamo napisał(a)

...przed ucięciem zamienić znaki & quote; (7 znaków) na " - (1 znak)...

powiem jedno - myslisz ze dlaczego w bazie jest & quote ; & amp ; ? owszem - moze miec to wplyw na zapytania, ale tez jest to po to, aby twoja przegladarka wyswietlila to prawidlowo. tak samo znaki < i >. Imo jedyne poprawne rozwiazanie to sprawdzanie czy w tych 30 znakach jest &cos; i polskie znaki i odpowiednie wydłużanie pola tak, żeby po zamianie miało ono właśnie 30 znaków.

0

wiem po co jest tak w bazie - cały czas mówię żeby to zamienić na jeden znaczek tylko na mikrosekundę żeby to obciąć a po tym już zamienić z powrotem tak jak było - tyle żę ucięte już poprawnie !!!

naprawdę mnie nikt nie rozumie czy tylko nav się wybija z tłumu ?

0
Adamo napisał(a)

naprawdę mnie nikt nie rozumie czy tylko nav się wybija z tłumu ?

ja Cię rozumiem user image :)

0

Nie jestem przekonany czy jest to spowodowane parsowaniem tytułu - http://4programmers.net/Forum/216055 gubi się styl css, a w simple w ogóle się nie wyświetla.

0

częsciowo zostało poprawione, ale...
Adamo:

Wymagania

Trzeba mieć funkcję iconv() w standardowej bibliotece C, lub zainstalowaną bibliotekę libiconv. Biblioteka libiconv jest dostępna pod adresem http://www.gnu.org/software/libiconv/.

fragment manuala do php.

i jeszcze szczegol:

iconv_substr

(PHP 5)
iconv_substr -- Cut out part of a string

1 użytkowników online, w tym zalogowanych: 0, gości: 1