как закодировать URL в json с помощью php

#php #json #dialogflow-es

#php #json #dialogflow-es

Вопрос:

Я хочу отправить URL-адрес вместе с некоторым выводом текста в виде json с моей веб-страницы php, и для этого я использовал json_encode() функцию в php, и ниже приведен мой массив php, который будет преобразован в json:

 $output= array (
  'payload' => 
  array (
    'google' => 
    array (
      'expectUserResponse' => true,
      'richResponse' => 
      array (
        'items' => 
        array (
          0 => 
          array (
            'simpleResponse' => 
            array (





              'textToSpeech' => '<speak>some text... <audio src="https://example.com"></audio></speak>',
              'displayText' => 'some text...',





            ),
          ),
        ),
        'suggestions' => 
        array (
          0 => 
          array (
            'title' => 'cancel',
          ),
        ),
      ),
    ),
  ),
);

echo json_encode($output);
  

и этот php-код выдает следующий вывод json:

 {
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {





              "textToSpeech": "<speak>some text... <audio src=\"https://example.com\"></audio></speak>",
              "displayText": "some text..."





            }
          }
        ],
        "suggestions": [
          {
            "title": "cancel"
          }
        ]
      }
    }
  }
}
  

Но мне нужен следующий вывод json:

 {
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {





              "textToSpeech": "<speak>some text... <audio src="https://example.com"></audio></speak>",
              "displayText": "some text..."





            }
          }
        ],
        "suggestions": [
          {
            "title": "cancel"
          }
        ]
      }
    }
  }
}
  

Я не понял, как вставить URL в json в соответствии с моим требованием.

Ответ №1:

Если вам не нужны экранированные косые черты, вы можете использовать

 json_encode($response, JSON_UNESCAPED_SLASHES);
  

чтобы указать PHP не избегать этих косых черт.

Но если вы говорите о обратных косых чертах, они должны быть экранированы таким образом, поскольку PHP интерпретирует их как escape-символы. Вы всегда можете вручную удалить их на принимающей стороне.

Ответ №2:

 '<speak>some text... <audio src="https://example.com"></audio></speak>',
  

Двойные кавычки здесь не нужно заключать в экранирование. Обратные косые черты обрабатываются буквально, потому что строка заключена в одинарные кавычки. Обратная косая черта может экранировать только одинарную кавычку или другую обратную косую черту внутри строк, заключенных в одинарные кавычки. Любой другой следующий символ приводит к буквальной обратной косой черте.

Либо '<speak>some text... <audio src="https://example.com"></audio></speak>' (без экранирования), либо "<speak>some text... <audio src="https://example.com"></audio></speak>" (двойные кавычки) должны выдавать желаемый результат.