Функция PHP json_encode () и персидский язык - PullRequest
4 голосов
/ 26 ноября 2011

Я конвертирую базу данных веб-сайта в базу данных компонентов Joomla K2. в K2 есть столбцы extra_fields, которые пользователь может создавать настраиваемые поля, аналогично CCK Drupal. Поэтому я использовал эту функцию, чтобы сохранить источник элемента в поле. {"id":"7", "value":"Text"} но когда я использую json_encode "ارتباطات و اطلاع رساني" или что-то еще вместо получения

{"id":7,"value":"\u0627\u0631\u062a\u0628\u0627\u0637\u0627\u062a \u0648 \u0627\u0637\u0644\u0627\u0639 \u0631\u0633\u0627\u0646\u064a"}

, которое я вижу на своем локальном хосте, у меня есть:

{"id":"7","value":"u0631u0648u0627u0628u0637 u0639u0645u0648u0645u064a"}, когда данные вставляются в базу данных

ОБНОВЛЕНИЕ:

  • В том, что я пытаюсь записать, отсутствует косая черта json_encode

  • Я написал код php для чтения из таблицы, а затем преобразовал данные и вставил их в другую таблицу

  • скрипт, который я использую для создания json_encoded данных из моего источника:

    if($this->source[$i]){
            $this->source[$i] = trim($this->source[$i]);
            $this->extrafield[$i] = array("id"=>"7", "value"=>$this->source[$i]);
            $this->extrafield[$i] = json_encode($this->extrafield[$i]);
    }
    

ОБНОВЛЕНИЕ 2:

Я думаю, что решил свою проблему. проверьте ответ.

Ответы [ 3 ]

8 голосов
/ 09 июня 2014

Поскольку 5.4.0 вы можете использовать неэкранированный юникод для JSON, передав константу JSON_UNESCAPED_UNICODE в качестве второго параметра (что, конечно, необязательно):

<?php var_dump(json_encode(array('text' => 'ارتباطات و اطلاع رسانی'), JSON_UNESCAPED_UNICODE)); ?>

вывод будетбыть:

string(52) "{"text":"ارتباطات و اطلاع رسانی"}"

(от здесь )

1 голос
/ 26 ноября 2011

Я думаю, вы должны попытаться определить, где проблема на самом деле.Вы храните это в файле?База данных?Может ли быть так, что косые черты удаляются каким-либо экранирующим (или неэкранирующим) кодом?

В PHP 5.3.4 этот код:

<?php var_dump(json_encode(array('text' => 'رتباطات و اطلاع رساني')));

Правильно выводит:

string '{"text":"\u0631\u062a\u0628\u0627\u0637\u0627\u062a \u0648 \u0627\u0637\u0644\u0627\u0639 \u0631\u0633\u0627\u0646\u064a"}' (length=122)

0 голосов
/ 30 ноября 2011

Полагаю, проблема возникла с момента вставки данных в mysql, поэтому я использовал функцию mysql_real_escape_string (), и проблема, похоже, решена.

...