Decodowanie jsona z html, zwraca error Syntax

0

Witam mam problem w języku php z użyciem funkcji json_decode, mianowicie zawsze zwraca mi nulla, zauważyłem, że cudzysłów znaczników html wysypują decodowanie jsona i szukam jakiegoś rozwiązania.

przykładowy zakodowany json z htmlem w srodku:

{"sections":[{"id":"1120","id_agreement":"30","number":"1","deleted":"0","templates":[{"id":"540","paragraph_id":"1120","mode":"1","title":"","for":"","text":"<ol>\n<li><span style=\"font-family: 'times new roman', times, serif;\">Pożyczkodawca udziela Pożyczkobiorcy na Jego wniosek pożyczki w kwocie <strong>[#KwotaPozyczki],00</strong> zł (słownie<strong>:[#KwotaPozyczkiSlownie])</strong>, zwanej dalej &bdquo;Pożyczką&rdquo; na okres od dnia <strong>r.</strong> do dnia <strong>r. </strong>&nbsp;na zasadach określonych w niniejszej Umowie.</span></li>\n<li><span style=\"font-family: 'times new roman', times, serif;\">Pożyczka jest oprocentowana na warunkach rynkowych/ korzystniejszych niż rynkowe w stałej wysokości <strong>% </strong>w stosunku rocznym, zgodnie z Zasadami określonymi w pkt VI. Karty Produktu, o kt&oacute;rej mowa w &sect; 23 ust.1 . Oprocentowanie obowiązuje przez cały okres trwania Pożyczki z zastrzeżeniem ust. 5. Pożyczka jest udzielona na warunkach preferencyjnych ze względu na funkcjonowanie Przedsiębiorcy przez okres kr&oacute;tszy niż 3 lata na dzień zawarcia Umowy/ dla inwestycji w obszarze inteligentnych specjalizacji* .</span></li>\n</ol>","deleted":"0"}]},{"id":"1126","id_agreement":"30","number":"8","deleted":"0","templates":[{"id":"546","paragraph_id":"1126","mode":"1","title":"","for":"","text":"<ol>\n<li><span style=\"font-family: 'times new roman', times, serif;\">Zabezpieczenie spłaty zobowiązania oraz innych świadczeń pieniężnych bezpośrednio lub pośrednio związanych z niniejszą Umową stanowią:</span><span style=\"font-family: 'times new roman', times, serif;\">1) weksel</span></li>\n<li><span style=\"font-family: 'times new roman', times, serif;\">) poręczenie funduszu poręczeń kredytowych w wysokości do ...% kwoty pożyczki, tj. do ... zł</span></li>\n<li><span style=\"font-family: 'times new roman', times, serif;\">)hipoteka</span></li>\n<li><span style=\"font-family: 'times new roman', times, serif;\">4) cesja</span></li>\n<li>&nbsp;</li>\n</ol>","deleted":"0"}]}]}

Chyba, że ktoś ma jakiś pomysł jak te dane przetrzymywać w jednej kolumnie w bazie a potem w postaci tablicy zwracac na front :)
Kombinowałem też z base64, ale to przeciez sa tablice a nie string ..

4

Problemem nie są cudzysłowy, które masz prawidłowo eskejpnięte (aczkolwiek i tak sugeruję użyć: <span clas='cośtam... zamiast <span style=\"font-family: 'cośtam...).

Problemem są polskie znaki, które musisz zatem najpierw sobie zakodować jakimś htmlspecialchars, chociaż tutaj laska pisze, że są do tego nawet jakieś robione pod jsona funkcje:
https://administratorka.wordpress.com/2015/07/05/json-a-polskie-znaki/

1

@Freja Draco: Dobrze, polskie znaczki... Ale jeśli dobrze pamiętam (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding), to klient wysyła nagłówek z oczekiwanym kodowaniem a serwer w odpowiedzi wysyła info jakie to kodowanie faktycznie jest. Czyli może trzeba sprawdzić w nagłówku jakie jest kodowanie a dopiero wtedy dekodować?

2

Dobra rozpykane: jakby ktoś pytał przed zapisem jsona w bazie wystarczyło przelecieć pętlą po kolumnie gdzie jest html w tym przypadku ['text']:

htmlspecialchars($test['templates'][0]['text'], ENT_QUOTES, 'UTF-8');

takie cos encodowac -> wrzucić do bazy i spokojnie moge pobierac tego jsona z bazy i decodowane wypluwac na front :)

0

Dobra jednak nie śmigaj jakbym chciał, bo htmlspecialchars zamienia polskie znaki na nie za bardzo wiem co przykłaodowo:
Pożyczkodawca, zapisuje jako Po\u017cyczkodawca

i teraz jeżeli chce zwrócić to na front z polskimi znakami to htmlspecialchars_decode nic nie zmienia :(
Jakieś pomysły?

0

htmlspe­cial­cha­rs
The tran­sla­tions pe­r­for­med are:

  • '&' (am­pe­r­sand) be­co­mes '&'
  • '"' (do­u­b­le qu­o­te) be­co­mes '&qu­ot;' when ENT_NO­QU­O­TES is not set.
  • "'" (sin­gle qu­o­te) be­co­mes ''' (or ') on­ly when ENT_QU­O­TES is set.
  • '<' (le­ss than) be­co­mes '<'
  • '>' (gre­a­ter than) be­co­mes '>'

Więc jaka funkcja konwertuje polskie znaki na \uXXXX?

0

A nie możesz sobie oddzielić html-a do templatek a tylko sobie wstawiać dane w zależności od potrzeb?

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