Доброго времени суток получаю ответ от сервера в формате json, проблема в том, как избавиться от экранирования спецсимволов и вернуть первоначальный вид юникода? получаю например такую строку: <a href=\"http:\/\/www.facebook.com\/help\/\" target=\"_blank\">Like Button bet\u00e4tigen<\/a> stripslashes и utf8_decode почему-то не помогают get_magic_quotes_gpc() тоже говорит, что php сам ничего не менял, как я понимаю нужно получить в таком виде: <a href="http://www.facebook.com/help/" target="_blank">Like Button betätigen</a>
Код (PHP): $str = '<a href=\"http:\/\/www.facebook.com\/help\/\" target=\"_blank\">Like Button bet\u00e4tigen<\/a>'; $str = stripslashes($str); выводит Код (Text): [url="http://www.facebook.com/help/"]Like Button betu00e4tigen[/url] Работает. Не? Только там в тексте слешик тоже убрало, так что нужно сначала с юникодом разобраться. А если строку, которая должна быть в итоге, закодировать в utf8 Код (PHP): $str2 = '[url="http://www.facebook.com/help/"]Like Button betätigen[/url]'; $str2 = utf8_encode($str2); , то получится Код (Text): [url="http://www.facebook.com/help/"]Like Button betätigen[/url] явно отличается от приходящей в JSON. Так что utf8_decode не подойдёт по-любому. Тут нужна функция по расшифровке escape последовательностей. Добавлено спустя 8 минут 28 секунд: Например Код (PHP): <?php $str = '<a href=\"http:\/\/www.facebook.com\/help\/\" target=\"_blank\">Like Button bet\u00e4tigen<\/a>'; function replace_unicode_escape_sequence($match) { return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); } $str = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $str); $str = stripslashes($str); и вот оно Код (Text): [url="http://www.facebook.com/help/"]Like Button betätigen[/url]
Если он получает json, могу предположить, что обработка идет в js, а значит unescape() будет более чем достаточно.
хм... значит ноги ростут не отттуда начнём с начала тогда сам json я же и формирую, получая данные из удалённой базы данных, с целью последующего парсинга из явы в приложении для андроида формируется это примерно так: Код (Text): if($resLev1=$db->query($queryLev1)) { // Menu Level 1 while($rowLev1=$resLev1->fetch_assoc()) { $mid2=$rowLev1['id']; $pid=$rowLev1['pid']; $title=$rowLev1['title']; $header=$rowLev1['headline']; $content=$rowLev1['text']; array_push($datenLev1,array($mid2,$pid,$title,$header,$content)); ... $resultArr["level1"]=$datenLev1; echo json_encode($resultArr); }} получается, что этот json_encode и творит всё ненужное... может как-то возможно сформировать json другим способом? чтобы не вставлялось экранирование и не заменялись юникод на \uXXXX? а вот за это отдельное спасибо, часто нужно)
ну да, а потом в json_decode может сотворить нужное: Код (PHP): <?php $resultArr = array('word'=>'Like Button betätigen'); $encoded = json_encode($resultArr); echo $encoded,"\n\n"; print_r(json_decode($encoded)); выводит Код (Text): {"word":"Like Button bet\u00e4tigen"} stdClass Object ( [word] => Like Button betätigen )
это то ясно только вот проблеммка... json будет получаться из java кода, а не из пхп потому обратное преобразование не столь приятно... Хотелось бы, чтобы оно формировалось уже без "мусора", чтобы там не химичить и не в виде "stdClass Object", а в виде валидного json иначе парсер начинает ругаться, что json не валидный и не хочет его разберать(
далее код на PHP и даже вывод внезапно а это совсем другая тема. этот объект создаётся по умолчанию функцией json_decode
Врача! Ладно, запутывай дальше, я пас. И считаю, что по первому сообщению нашёл решение (учитывая тематику и текущую ветку форума).
Дык ить, "тред не читай@сразу отвечай", всмысле, на момент ответа, была уверенность, что речь таки об более профильных вещах сему форуму Ибо в первом посте нету конкретики, есть сообщение о том, что получаешь json, ну и выводы далее в голове сами рождаются )
Ke1eth, ну так я и не критиковал) дали несколько вариантов решения и пошел по тому, который более соответствует моей проблемме. На момент вашего повторного вопроса конкретика уже была внесена и ответ был очевиден вроде на форумах таким образом обычно и происходит общение... ну если вдруг в этом понимании у нас разные взгляды, извиняюсь