2012-01-12 8 views
27

W PHP używam json_encode() do echo tablic w atrybutach danych HTML5. Jak wymaga JSON - i json_encode() generuje - wartości enkapsulowane przez podwójne cudzysłowy. Ja do nich zawijać atrybuty moje dane z apostrofami, jak:Wyodrębnianie/kodowanie pojedynczych cudzysłowów w atrybutach danych HTML5 zakodowanych w JSON

<article data-tags='["html5","jquery","php","test's"]'> 

Jak widać, ostatni znacznik (test) opisują pojedynczy cudzysłów, a przy użyciu json_encode() bez opcji prowadzi do problemów analizowania.

Używam json_encode() z parametrem JSON_HEX_APOS, a parsowanie jest w porządku, ponieważ moje pojedyncze cytaty są kodowane, ale zastanawiam się: czy jest jakaś minus?

+0

You znaczący minus w znaczeniu, że to działa? – hakre

+1

Mam na myśli wadę w rozumieniu "nieoczekiwanych efektów ubocznych, które mogą powodować kodowanie szesnastkowe" –

+0

Nie pokazałeś żadnego kodu, jak coś wypisać, więc odpowiedź może być tylko dobrym domysłem. – hakre

Odpowiedz

47

Trzeba danych ewakuacyjnych HTML echem w HTML:

printf('<article data-tags="%s">', 
    htmlspecialchars(json_encode(array('html5', ...)), ENT_QUOTES, 'UTF-8')); 
+0

+1 zawsze używaj odpowiedniego kodowania na wyjściu, jedynym sposobem, aby przejść. Nieprawidłowe punkty kodowe (takie jak '\ x00' będą wymagały kodowania szesnastkowego zgodnie ze specyfikacją X (HT) ML). – hakre

+0

To chyba najbezpieczniejsza opcja, dziękuję. –

+0

dla prostoty htmlspecialchars (json_encode ($ arrayData), ENT_QUOTES, 'UTF-8') – zainengineer

Powiązane problemy