#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>"
(двойные кавычки) должны выдавать желаемый результат.