![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 27.02.2009 Ostrzeżenie: (10%) ![]() ![]() |
Witam (mój pierwszy post tutaj więc proszę o wyrozumiałość gdybym napisał coś głupiego - na wszelki wypadek daje do przedszkola)
![]() Zrobiłem stronę www działającą na kilku dziwacznych wersjach językowych - arabski, chiński, japoński (negoist.com -- uwaga strona dla dorosłych ![]() Żeby wyświetlić tylko pierwsze 300 znaków opisu bez formatowania robię tak: Kod mb_internal_encoding("UTF-8"); $short_text = mb_substr(strip_tags($pr[text]), 0, 300); Wszystko ok, tylko czasem utnie tekst w środku słowa, co mi się nie podoba i chciałem po prostu obciąć wszystko do pierwszej spacji od końca. napisałem więc prostą linijkę kodu: Kod while($short_text[mb_strlen($short_text)-1]!=' ')$short_text=mb_substr($short_text, 0, -1); Wszystko działa w wersji angielskiej, w chińskich, arabskich itp... się zapętla, czyli nie znajduje spacji ![]() Próbowałem też zamiast tego mb_substr z "-1" używać: Kod function removeCharAt($str, $int){ return substr_replace($str,"",$int,1); } ale efekt ten sam... Ma ktoś jakiś pomysł na rozwiązanie problemu?? Na razie doszedłem do tego że dla mb mode nie prawidłowo działa operator indeksowania: Kod for($i=0; $i<mb_strlen($short_text); $i++){ echo $short_text[$i]; } zwraca połowę krótszy tekst niż: Kod echo $short_text; w dodatku na końcu jakiś pytajnik, czyli pewnie kawałek znaku... idzie byte po byte nie uwzględniając że znaki mają inną długość... Jakieś zastępstwo dla operatora indeksowania? coś w stylu: $short_text.getChar(index);?? Ten post edytował BlackPig 27.02.2009, 13:05:14 -------------------- PROGRAMISTA
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Na razie doszedłem do tego że dla mb mode nie prawidłowo działa operator indeksowania: Kod for($i=0; $i<mb_strlen($short_text); $i++){ echo $short_text[$i]; } Niestety nie pobierzasz tak specjalnych znaków językowych. Sposób na to Kod mb_substr($text, $i, 1, 'UTF-8'); Zamiast takiej petli Kod while($short_text[mb_strlen($short_text)-1]!=' ') uzyj http://pl.php.net/manual/pl/function.mb-strrpos.php http://forum.php.pl/index.php?showtopic=10...kracanie+tekstu Ten post edytował wookieb 27.02.2009, 13:51:52 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 27.02.2009 Ostrzeżenie: (10%) ![]() ![]() |
Kod mb_substr($text, $i, 1, 'UTF-8'); --> takie obejście problemu się sprawdza ![]() ![]() -------------------- PROGRAMISTA
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Wiec chyba nie ma wyjscia jak zdefiniowanie dla kazdego jezyka tablicy z mozliwymi spacjami.
Potem przy wyszukiwaniu ostatniej spacji Kod $pozycja=false; foreach($spacje as $spacja) { $newPozycja=mb_strrpos($ciag, $spacja,0,'utf-8'); if($newPozycja<$pozycja) $pozycja=$newPozycja; // to tak tylko dla wyszukania najmniejszej pozycji spacji } oczywiscie $ciag jest to wstepnie skrocony tekst. -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 27.02.2009 Ostrzeżenie: (10%) ![]() ![]() |
Jasne tak trzeba by zrobić, ale dopóki nikt mnie do tego nie zmusi to zostawiam temat
![]() Generalnie problemem było dla mnie inne zachowanie się operatora indeksowania i innych funkcji związanych ze stringami niż to znane z podstaw większości języków. O ile w przypadku funkcji wystarczy dopisać "mb_" na początku to w przypadku indeksowania trzeba było pomyśleć, a mi to akurat nie wyszło, więc dzięki za pomoc ![]() -------------------- PROGRAMISTA
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 16:11 |