Json_decode ékezetes betű

Json_decode ékezetes betű
2019-07-03T17:04:44+02:00
2019-07-04T16:42:05+02:00
2022-10-15T21:36:05+02:00
gyendresz
Sziasztok!

Hogy lehet ékezetes jsont dekódolni?

$json = '{"city":"Mosonmagyaróvar"}'; $json_a = json_decode($json,false, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);
Mutasd a teljes hozzászólást!
Igazából miben [milyen kódolásban] van az input, és miben kellene legyen az output?
Mutasd a teljes hozzászólást!

  • $json = mb_convert_encoding($json, 'UTF-8', 'ASCII,UTF-8,ISO-8859-1'); $json_a = json_decode($json,false);
    Mutasd a teljes hozzászólást!
  • Ezt kipróbáltad olyasmivel is, hogy {"fű":"fő"} ?
    Mutasd a teljes hozzászólást!
  • Szia!

    Jogos!
    Egyébként kipróbáltam ('{"city":"MosonmagyaróvárűŰŐő"}';) csak nem vettem észre, hogy kalaposat csinál belőle. Örültem annak, hogy egyáltalán lehozza a struktúrát - ami a jelen esetben elég is. 
    Persze 50 ponttal jutalmaznék egy jobb megoldást . (Ha a moderátor is segit benne.)

    Köszi:EGY
    Mutasd a teljes hozzászólást!
  • Igazából miben [milyen kódolásban] van az input, és miben kellene legyen az output?
    Mutasd a teljes hozzászólást!
  • Ugrálok ki-be feladatokból és nem vettem észre, hogy a forráskódban nincs beállitva az utf-8. Ezért nem működött a decode .
    Nem is értettem, hogy miért nem működik élből.
    Mutasd a teljes hozzászólást!
  • Tákoltam egy tesztprogramot, aszerint UTF8-at elfogad a json_decode; mást nem, konvertálni kell:

    #!/usr/local/bin/php <?php $in1= "{\"\xe1rv\xedzt\xfbr\xf5\": ". "\"t\xfck\xf6f\xfar\xf3g\xe9p\"}"; /* encoding=ISO-8859-2 */ $in2= "{\"\xc3\xa1rv\xc3\xadzt\xc5\xb1r\xc5\x91\": ". "\"t\xc3\xbck\xc3\xb6rf\xc3\xbar\xc3\xb3g\xc3\xa9p\"}"; /* encoding=UTF-8 */ printf ("\n== 1.változat (ISO-8859-2: %s) ===\n", $in1); printf ("\nsimán:\n"); $out1= json_decode ($in1); var_dump ($out1); printf ("\nmb_convert(to=UTF-8,from=ISO-8859-2) után:\n"); $out1= json_decode (mb_convert_encoding ($in1, 'UTF-8', 'ISO-8859-2')); var_dump ($out1); printf ("\n== 2.változat (UTF-8: %s) ===\n", $in2); $out2= json_decode ($in2); var_dump ($out2); ?>

    Eredmény (utf8-as terminálon):

    == 1.változat (ISO-8859-2: {"árvíztûrõ": "tüköfúrógép"}) === simán: NULL mb_convert(to=UTF-8,from=ISO-8859-2) után: object(stdClass)#1 (1) { ["árvíztűrő"]=> string(16) "tüköfúrógép" } == 2.változat (UTF-8: {"árvíztűrő": "tükörfúrógép"}) === object(stdClass)#2 (1) { ["árvíztűrő"]=> string(17) "tükörfúrógép" }
    Mutasd a teljes hozzászólást!
  • Most lehet, hogy megküzdesz ezzel a példával, de tényleg az a cél, hogy PHP forráskódban tárolt JSON-t dekódolj? Mert ha a valóságban külső fájlból vagy mondjuk curl-al szerzed a JSON-t, arra a PHP fájl enkódolása nyilván nem hat majd.
    Mutasd a teljes hozzászólást!
  • Igazából egy régi móricka programot módositottam egy curl-os POST-os, bejelentkezéses adatelérés tesztjére, főleg a kommunikációra koncentrálva. 
    A kommunikáció működött is de a dekódolás nem. Azt láttam, hogy az ékezetes adatok miatt. Ezt nem értettem, de sebaj, elkezdtem berakni a jsont ,konvertálgatni meg a headert változtatgatni stb, holott csak a program kódlapját kellet utf8-ra állitani.
    Köszönöm a segitségeteket: EGY
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd