• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak pozbyć się wyrażeń regularnych zwróconych przez funckję "json_encode()"?

Object Storage Arubacloud
0 głosów
436 wizyt
pytanie zadane 12 sierpnia 2018 w JavaScript przez Śwież4k Bywalec (2,570 p.)
edycja 12 sierpnia 2018 przez Śwież4k

Siema, mam pytanie, bo funkcja json_encode() w php zwraca mi np. coś takiego

\r\n\t\t Smart Gym Wodospady<\/h3>\r\n\t\t
\r\n\t\t Miesi?czny karnet, link: LINK\r\n\t\t<\/p>

Kontakt: | Cennik: ??? | Strona Internetowa: siema.html | Adres: kulturka <\/p>\r\n\t\t"

Jak dobrze rozumiem są to wyrażenia regularne te litery po backslashu. Za pomocą tej funkcji zwracam dane do AJAXa, a potem jes wyświetlam na stronie za pomocą funkcji 

$('div').html(response);

Czy istnieje jakaś funkcja lub jakiś sposób, który pomoże pozbyć mi się tych wrażeń?

2 odpowiedzi

0 głosów
odpowiedź 12 sierpnia 2018 przez StOcK Mądrala (6,100 p.)
wybrane 12 sierpnia 2018 przez Śwież4k
 
Najlepsza

W php użyj:

stripslashes()

ale wtedy JS zwróci Ci, że JSON jest niepoprawny.

Najlepiej to w JS użyj JSON.parse

komentarz 12 sierpnia 2018 przez Śwież4k Bywalec (2,570 p.)
slashe się kasują, ale litery pozostają. Zamiast \r\n\t\t jest rntt
komentarz 12 sierpnia 2018 przez StOcK Mądrala (6,100 p.)

jeśli w PHP zwracasz dane np.

echo json_encode($result);

to w JS zrób:

var obj = JSON.parse(zmienna_z_php);
alert(obj.link);

Przykład.

komentarz 12 sierpnia 2018 przez StOcK Mądrala (6,100 p.)
Dodatkowo, albo mi się wydaje, albo masz różne kodowania plików (koduj pliki w UTF-8 Without BOM)
komentarz 12 sierpnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)
Tak po pierwsze to dla pewności w mnie lepiej to JSON.parse owijać w try-catch, ale już pomijając to to nie rozwiązuje to przecież Kolegi problemu, ponieważ znaki, które ma w pierwotnym ciągu to poprawne znaki ASCII i jesli są zawarte w ciągu znakowym to zostaną przekazane jako JSON.
komentarz 12 sierpnia 2018 przez StOcK Mądrala (6,100 p.)

 json_encode() w php zwraca mi np. coś takiego

Ten łańcuch znaków zwraca mu funkcja json_encode, czyli ciąg znaków jest gotowy do przesłania. Nie musi z nim nic robić po stronie PHP.

1
komentarz 12 sierpnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)
ale on właśnie chce ten ciąg obrobić, czyli usunąć białe znaki. A to czy zrobi to w PHP czy w JS to już mało istotne, nie są to żadne znaki niebezpieczne, ale wg mnie lepiej obrobić dane na serwerze i do klienta już wysłać gotowy ciąg. Ale oczywście równie dobrze można go obrobić w JS, nadal jednak można to zrobić po prostu jedym regexp eliminującym tzw. białe znaki, a czy w PHP czy w JS to w ogóle najmniej istotne w tej chwili.
komentarz 12 sierpnia 2018 przez Śwież4k Bywalec (2,570 p.)
Sama funkcja JSON.parse() wystarczyła. Nie wiem czemu jej nie postanowiłem wcześniej użyć, bo ją znałem. Dziękuję obu Panom za pomoc
komentarz 12 sierpnia 2018 przez StOcK Mądrala (6,100 p.)

@Tomek Sochacki, równie dobrze mógłby na serwerze użyć json_decode też pozbyłby się białych znaków. Ale w takim razie po co by używał json_encodewink

komentarz 12 sierpnia 2018 przez Comandeer Guru (602,340 p.)

@StOcK  ermmm… Ale po co ma używać json_decode do pozbycia się białych znaków, skoro on to powinien zrobić na wejściu do json_encode? Zastanawiam się, czy zwykłe trim by nie wystarczyło.

komentarz 12 sierpnia 2018 przez StOcK Mądrala (6,100 p.)

@Comandeer, ale może potrzebne mu są białe znaki. @Śwież4k zapomniał w skrypcie dekodować JSON i wypisywało mu zakodowane białe znaki i chciał się ich pozbyć. A wystarczyło dekodować JSONa.

komentarz 12 sierpnia 2018 przez Comandeer Guru (602,340 p.)
https://3v4l.org/WcmQ7 – przecież to nic nie daje, bo do klienta trzeba posłać jako JSON. A nie da się posłać znaku nowej linii jako części JSON-a.
komentarz 13 sierpnia 2018 przez StOcK Mądrala (6,100 p.)

Może w ten sposób wyjaśnię:
Przesyła żądanie z AJAXa do serwera, na serwerze np:
 

$result='
<h1>title</h1>


<small>subtitle</small>


<b>co               s</b>cos

';
echo json_encode($result);

Teraz odbiera żądanie z serwera 

console.log(data);

i... a teraz

console.log(JSON.parse(data));

Teraz rozumiesz?

komentarz 13 sierpnia 2018 przez StOcK Mądrala (6,100 p.)

Albo

$web_site = array(
    'Nam' => 'OSTraining',
    'URL' => 'http://ostraining.com',
    'Purpose' => 'Education'
);
echo json_encode($web_site);

Łatwiej chyba pracować na obiektach niż na ciągach znaków wink


 

komentarz 13 sierpnia 2018 przez Comandeer Guru (602,340 p.)
Ale co to ma wspólnego z problemem…? Nie musisz mi tłumaczyć, jak działa format JSON, bo znam go bardzo dobrze. Nijak się też to ma do mojego pytania o niepotrzebne przepuszczanie tych danych przez json_decode na serwerze.

Poza tym wypada założyć, że białe znaki mają być wycięte, bo i tak to nie wpływa na renderowanie ostatecznego kodu HTML.
komentarz 13 sierpnia 2018 przez Comandeer Guru (602,340 p.)
Inna rzecz, że jQuery czy każda inna biblioteka z obsługą Ajaksa ma wsparcie dla JSON out of box, więc jeśli musimy sami parsować po stronie przeglądarki, to wskazuje to najprawdopodobniej na złe użycie samej biblioteki.
+1 głos
odpowiedź 12 sierpnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)
edycja 13 sierpnia 2018 przez Tomek Sochacki

To nie wyrażenia regularne ale po prostu znaki ASCII zapisane w formie skróconej. Możesz je natomiast łatwo usunąć wyrażeniem regularnym:

/^\s+|\s+$/

i przeleć nim cały ciąg (nie pamętam już teraz fukcji w PHP do obsługi regexp ale te znajdziesz sobie w manualu) albo funkcja trim.

Podobne pytania

0 głosów
2 odpowiedzi 130 wizyt
0 głosów
4 odpowiedzi 650 wizyt

92,631 zapytań

141,498 odpowiedzi

319,872 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...