Mysql i PHP kodowanie w pliku txt

0

Koledzy, mam problem, mam w bazie danych teksty artykułów wysłane w kodowaniu utf-8 (baza też jest utf8).
Pociągam te dane php'em usuwam znaczniki \n\r używając str_replace(PHP_EOL, "", $tekst) i wrzucam do pliku txt i tutaj zaczyna się problem. Pliki tworzą się ładnie, tekst jest w środku, przy czym na początku każdej linii w pliku jest jakiś taki mały prostokącik.

Przez to w programach typu np opensong, zżera mi pierwszą literę w każdej linii. Pomocy bo już opadam z sił.

0

Czy aby na pewno w Twojej konfiguracji PHP_EOL == "\n\r" ? U mnie na przykład nie.
taki prosty test:

echo (PHP_EOL == "\n") ? 'y' : 'n';
echo PHP_EOL;
echo (PHP_EOL == "\n\r") ? 'y' : 'n';
echo PHP_EOL;
echo (PHP_EOL == "\r") ? 'y' : 'n';
echo PHP_EOL;
echo (PHP_EOL == "\r\n") ? 'y' : 'n';
echo PHP_EOL;
 

pokaże Ci którą wartość masz u siebie. jak dla mnie masz tylko \n w PHP_EOL, a w danych \n\r, więc \n usuwasz, \r zostaje i staje się "prostokącikiem" na początku linii :)

0

Problemem jest fakt, że u Ciebie PHP_EOL zapewne jest \r\n (na pewno nie \n\r!).

Drugi problem to fakt, że w bazie dane mogły zostać zapisane jako \n, ale to ty chcesz je u siebie już porównywać z \r\n\, co Ci się może nie powieść. To, że dane ładujesz na systemie, który linie zakańcza tak, a nie inaczej nie oznacza, że te dane z bazy zostaną nadpisane!

Najprościej będzie rozdzielać zawsze po \n a potem każdą linię potraktować przez trim (jeżeli nie chcesz wycinać spacji, to po prostu podaj, które znaki wyciąć).

Uwaga jeszcze jedna: Na żadnym środowisku nie będziesz miał \r jako zakończenie linii. Takie coś było jedynie w bardzo starych MACach, ale dziś o to się martwić nie musisz.

0

chlopaki dzięki za odpowiedź. Przepisałem sporo kodu - tego co zapisuje do bazy i co odczytuje, w tej chwili wygląda to tak:

  1. skrypt zapisujacy do bazy, robi porzadek w ten sposób
    str_replace(array("
    ", "
    , "\r"), "", $tekst);

w ten sposób wszystkie linie zakończone w bazie są tylko znacznikami \n, dzięki czemu przy odczycie już nie muszę nic robić. Wrzucam do pliku. Wygląda on tak jakbym sobie zażyczył, czyli:

[V1]
Wielbię Ciebie
costam costam costam
w tym Sakramencie

wyświetla się ładnie za wyjątkiem tego że usuwa mi każdą pierwszą literę. Czyli przy prezentacji mam na ekranie:
ielbie Ciebie
ostam costam costam
tym Sakramencie

więc niby ok, ale jednak coś gdzieś siedzi ukrytego w tych tekstach. Czy jest jakaś możliwość wrzucenia tekstu do jakiegoś edytora żeby mi pokazało wszystkie znaczniki i co się tylko da, bo zauważyłem że jednej linijki całej nie pokazuje.

0

a co widzisz przez PhpMyAdmin?

0

Chłopaki jeszcze raz dzięki. Pewnie dzięki wam nie pójdę dziś spać :P

Problem okazał się błachy a nie samowicie głupi ze strony twórców opensonga. Okazało się że ..... 'każda linijka ma zaczynać się spacją', dodałem spację i już wszystko śmiga ;)

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