2010-07-27 12 views
9

Wysyłam dane json_encoded z mojego serwera PHP do aplikacji na iPhone'a. Łańcuchy zawierające elementy html, takie jak '&', są usuwane przez json_encode i wysyłane jako &.Uzyskiwanie json_encode, aby nie uciec encji html

szukam zrobić jedną z dwóch rzeczy:

  • zrobić json_encode nie uciec podmioty html. Doktor mówi, że tryb "normalny" nie powinien mu uciekać, ale nie działa dla mnie. Jakieś pomysły?

  • sprawić, że aplikacja iPhone un-escape encje html tanio. Jedyny sposób, w jaki mogę teraz to zrobić, to obrót XML/HTML parser, który jest bardzo drogi. Wszelkie tańsze sugestie?

Dzięki!

Odpowiedz

7

Ani PHP 5.3 ani PHP 5.2 nie dotykają elementów HTML.

Można test to z następującego kodu:

<?php 
header("Content-type: text/plain"); //makes sure entities are not interpreted 
$s = 'A string with &amp; &#x6F8 entities'; 
echo json_encode($s); 

Zobaczysz jedyną rzeczą PHP robi jest dodanie cudzysłowie łańcucha.

+1

Moje źródło samo w sobie uciekło - móżdżek! – psychotik

2

Na podstawie manual wygląda na to, że json_encode nie powinien uciekać z twoich obiektów, chyba że wyraźnie to powiesz, w PHP 5.3. Czy prawdopodobnie używasz starszej wersji PHP?

+0

Tak, używam 5.2.6 Więc sprzed 5,3 json_encode nie uciec podmioty html domyślnie? – psychotik

3

json_encode tego nie robi. Masz inny komponent, który wykonuje kodowanie HTML.

W przypadku korzystania z opcji JSON_HEX_ można uniknąć, że wszelkie < lub & znaki pojawiają się na wyjściu (oni zamieniony na \u003C lub podobnych JS smyczkowych dosłownych ucieczek), dzięki czemu możliwe uniknięcie problemu:

json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT) 

chociaż to zależy od dokładnego rozpoznania, które znaki są dalej kodowane w HTML. Może również znaki spoza ASCII?

0

Wychodząc z odpowiedzi Artefacto, polecam użycie tego nagłówka, jest on specjalnie zaprojektowany dla danych JSON zamiast zwykłego zwykłego tekstu.

<?php 
header('Content-Type: application/json'); //Also makes sure entities are not interpreted 
$s = 'A string with &amp; &#x6F8 entities'; 
echo json_encode($s); 

Upewnij się, sprawdź ten post do bardziej konkretnych powodów, aby korzystać z tego typu treści, What is the correct JSON content type?