Hej Chłopaki
Sorki, ale kod, który wcześniej podałam w rozwiązaniu:
ltrim(rtrim(trim(str_replace(" ", "", str_replace(" ", " ", str_replace("%0D", "", str_replace("%0A", "", str_replace(" ", " ", urldecode(urlencode(chop($dane)))))))), " \n\t\r"), " \n\t\r"), " \n\t\r");
To podpowiedź innego użytkownika na innym serwisie i nie uwzględnił on znaków: , %0D i %0A, a ja po prostu skopiowałam ten kod i wkleiłam na forum za co przepraszam.
Zauważyłam błąd i zdefiniowałam brakujące znaki i dodałam do swojego skryptu taki kod:
ltrim(rtrim(trim(str_replace(" ", "", str_replace(" ", " ", str_replace("%0D", "", str_replace("%0A", "", str_replace(" ", " ", urldecode(urlencode(chop($dane)))))))), " \n\r\t\v\0"), " \n\r\t\v\0"), " \n\r\t\v\0");
UWAGA: w rozwiązaniu można zastosować funckję: html_entity_decode(), ale wtedy proszę usunąć: str_replace(" ", " ", $string)
Chciałam odnieść się do słów "Vikinga", "Gino" i "TrueBlue"
"Viking": Masz rację:
W obecnych czasach mało kto pisze samodzielnie coś, co jak widać jest bardzo zawodne. Jakieś str_replace po 2 czy 3 spacjach, chop który jest niczym innym jak aliasem do rtrim itd.
Jestem początkująca i się uczę. Mam prawo robić błędy, aby je później naprawiać. Szybko się uczę i sama wybrałam, żeby tworzyć samodzielnie i testować swoją pracę. Nawet nie masz pojęcia jaka to radość dla dziewczyny takiej jak ja, jak coś uda mi się zrobić i że to działa tak jak chcę

Racja, że coś było nie tak z str_replace(), ale poprawiłam to

Odnośnie funkcji chop() i rtrim() to też masz rację, chop() jest aliasem rtrim() i obie funkcje wykonują podobne zadania - usuwają prawy znak z końca ciągu - różnica jednak jest taka, że rtrim nie usuwa kodowanych znaków z prawego końca ciągu lecz z prawej strony. Zresztą mówią, o tym oryginalne definicje tych funkcji:
1) "The chop() function removes whitespaces or other predefined characters from the right end of a string."
2) "The rtrim() function removes whitespace or other predefined characters from the right side of a string."
"Gino": Masz rację:
Ale po co te ltrim i rtrim po sobie, skoro trim robi to za nie? Chcesz Nam dowieść, że funkcja trim źle działa? Poza tym bez podanych parametrów funkcje trim i tak usunie te znaki.
trim() na pewno działa poprawnie i z tym nie będę się kłóciła

Kiedy string jest zawarty tylko w zmiennej trim() poradzi sobie z pierwszym i ostatnim znakiem poprawnie bez określania parametrów - wiem bo sprawdzałam.
Sytuacja komplikuje się, gdy string jest odczytywany z pliku do zmiennej, a ta zmienna przechodzi przez pętle "foreach", wówczas trim() przepuszcza spację ze względu na nadpisanie pliku lub jego kodowanie - w takim przypadku funkcja wykona się poprawnie, ale nie usunie spacji.
Dla zobrazowania tego problemu przedstawie poniżej taką sytuację:
Plik: zawartość("<>to jest zawartość pliku<br />kolejny tekst<>")
Funkcja odczytu: file("dane.txt")
Wczytanie do zmiennej: $dane("
(spacja)<>to jest zawartość pliku<br />kolejny tekst<>
(spacja)");
Pętla: foreach($dane)
Funkcja trim: trim("
(spacja)<>to jest zawartość pliku<br />kolejny tekst<>
(spacja)");
Wynik:
"
<>to jest zawartość pliku
(spacja)kolejny tekst
<>";
Legenda:
<> - kodowana spacja
<br /> - przełamanie linii
(spacja) - spacja po przełamaniu linii
Jak widać trim() usunęło spację z prawej i lewej strony i zadziałało dobrze, ale nie usunęło kodowanej spacji więc i tak spacja została również nie usunęło spacji po przełamaniu linii i tu z pomocą przychodzi funkcja chop(), która usuwa spację po przełamaniu linii w odczycie stringu z pliku czego nie robi trim() - to jest ta mała różnica

Aby wymusić usunięcie z prawej i lewej strony usunięcie spacji po przeczytaniu treści z pliku w pętli należy wywołać następujące po sobie funkcje, które wykonują podobny zakres działania.
Autor do tego celu użył: ltrim() i rtrim() czyli:
ale można też zrobić tak:
trim(trim($dane)); // ponieważ w stringu znajdują się z prawej i lewej strony dwie spacje po odczycie z pliku
Jeszcze odnośnie parametrów w trim()
1) ltrim($dane, " \n\r\t\v\0");
2) rtrim($dane, " \n\r\t\v\0");
3) trim($dane, " \n\r\t\v\0");
Zostały one określone specjalnie, ponieważ mimo, że w domyśle funkcja usuwa "\n\r\t" to my chcemy aby robiła to bezwzględnie - zamiast tego mogło by być np: "mama"
"TrueBlue":
Co ma dawać wywołanie urldecode bezpośrednio na urlencode?urldecode() i urlencode() w zasadzie w rozwiązaniu niczego nie wnoszą po za tym że kodują znaki spacji, unicode, niektóre znaki z tablicy ASCII i odkodowują je do postaci pierwotnej.
W bliższym znaczeniu funkcje te ujednolicają string przy założeniu w jaki sposób ma się zachowywać string (ale na razie niczego nie wymyśliłam, więc nie zmieniam kolejności) - to chodzi, o kolejność wystąpienia funkcji urldecode() i urlencode() w rozwiązaniu jeśli będę chciała coś wykombinować przy pomocy tych funkcji

"Gino" przedstawił ładnie wykonanie funkcji dla przykładu, ale mi nie chodziło o plik .vtt (na początku po prostu się pomyliłam - myślałam, że używam pliku tekstowego, a to był plik vtt)
Mimo wszystko w przykładzie:
WEBVTT
Kind: captions
Language: en
00:09.000 --> 00:11.000
We are in New York City
00:11.000 --> 00:13.000
We are in New York City
Są puste linie, a mój skrypt wypisuje w każdej lini jakiś string i nie wiadomo, czy "gino" przepuścił swój przykład przez pętle odczytując plik czy może treść zawarł w zmiennej.
W każdym bądź razie sprawa jest rozwiązana

Przynajmniej dla mnie. Będę używać mojego rozwiązania, które teraz podałam poprawione.

Dziękuję Wam Chłopaki za zainteresowanie i za wszelką pomoc. Bardzo Pozdrawiam