Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] jakieś ukryte znaki - jak je usunąć
Forum PHP.pl > Forum > Przedszkole
novy85
witam,

pobieram z bazy jakiś ciąg znaków, który potem "przepuszczam" przez trim(), strip_tags(), a następnie wycinam z niego za pomocą substr() 60 pierwszych znaków. To co wycinam pojawia się potem w "chmurce".

Problem jest w tym, że niektóre działają poprawnie, ale są też takie, które nie działają (chmurka się nie wyświetla) i jak na moje oko są tam jeszcze jakieś znaki, których nie widać.


Jak się mylę to powiedzcie czemu tak się dzieje, a jak mam rację to powiedzcie jak je usunąć.

Przykład:

ten nie działa:
  1. <a href="index.php?op=9&f=1&idg=4" onMouseOver="return overlib('<left>Cena: <b>39 901,00 PLN<br/>Witam mam do sprzedania pięknego mercedesa E270CDi.Auto po...', ol_width=200, ol_offsetx=10, ol_offsety=10, CAPTION, ' <center>Piękny Mercedes W210 E 27...</center>')" onMouseOut="nd();"><img src="foto/prom/4.jpg"></a>


ten działa:
  1. <a href="index.php?op=9&f=1&idg=1" onMouseOver="return overlib('<left>Cena: <b>10 000,00 PLN<br/>FRONTERA 2.2 DTI 16V 2000r . KLIMATYZACJAAuto ma progi oraz ...', ol_width=200, ol_offsetx=10, ol_offsety=10, CAPTION, ' <center>sprzedam samochód Opel FR...</center>')" onMouseOut="nd();"><img src="foto/prom/1.jpg"></a>



Pozdrawiam!
Zyx
Pierwszy pomysł to używanie Unikodu. W przypadku UTF-8 znaki o kodach od 128 (m.in. polskie litery) zapisywane są za pomocą dwóch i więcej bajtów. Korzystając ze zwykłego substr() może się zdarzyć, że przypadkowo rozetniesz taki znak Unikodu na pół i wtedy dostaniesz śmieci, gdyż przeglądarka nie będzie w stanie tego poprawnie przeczytać. Obsługa Unikodu w standardowych funkcjach PHP pojawi się dopiero z wersją 6, póki co możesz spróbować użyć funkcji z rozszerzenia mbstring właśnie do obsługi kodowań wykorzystujących więcej, niż 1 bajt. Gdzieś kiedyś w sieci widziałem też bibliotekę z zamiennikami napisanymi w PHP; próbowałem ją przed chwilą odnaleźć, ale nie wyszło. Może ktoś inny będzie wiedzieć.

Oczywiście jeśli nie korzystasz z tego kodowania, przyczyna leży gdzie indziej i wtedy mój post za wiele Ci nie da.

PS. Tego dodatkowego kodu to nie mogłeś naprawdę umieścić podczas pisania posta, tylko dopiero jak ja już odpisałem? Nawiasem mówiąc stosuj znaczniki formatujące...
novy85
zauważyłem, że problem pojawia się w przypadku kiedy w edytorze TinyMCE jest jakieś zdanie a następnie zrobiony "ENTER" i następne zdanie. w TinyMCE zapisze to tak np.
  1. <p>Jakieś zdanie</p>
  2. <p>Następne zdanie</p>


i problemem jest ten nieszczęsny "ENTER" - sprawdzałem, jak usunąłem go ręcznie w bazie to wszystko działa
  1. <p>Jakieś zdanie</p><p>Następne zdanie</p>


już sobie poradziłem:
  1. <?php
  2. str_replace(array("r\n", "r", "\n"), '<br>', $opisS[$a])
  3. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.