PHP在JSON中转义html字符串

我正在使用Slim php框架与包含复杂HTML内容的数据库,但在调用get方法时它会返回 一个糟糕的json。
这是返回代码</ p>

  $ response-&gt; withJson($ resp,201);

</ code> </ pre>

我也试过json_encode但仍然无效:</ p>

  $ response-&gt; withJson(json_encode(  $ resp),201); 
</ code> </ pre>

我刚注意到最后返回的JSON缺少'}]',内容是否有可能太长 要作为字符串传输?
当我调用 var_dump($ resp)</ code>时,它正确显示我的内容</ p>
</ div>

展开原文

原文

I'm using Slim php framework with a database that contains complex HTML content, but when calling the get method it returns a bad json. Here's the return code

$response->withJson($resp, 201); 

I also tried with json_encode but still not valid:

$response->withJson(json_encode($resp), 201);

I just noticed that the JSON returned is missing '}]' at the end, is it possible that the content is too long to be transferred as a string ? Also when i call var_dump($resp) it shows my content correctly

dongzhan2461
dongzhan2461 就在今天,我已经使用32位PHP/5.5.x进行JSON编码,就像22MB的数据一样,而且我正在重复使用以前的代码库,这些代码库已经在生产中用于超过500MB的数据集。我不知道你传输了多少数据,但我不认为大尺寸会导致截断。您应该确定截断发生的确切位置。
4 年多之前 回复
doujia1679
doujia1679 好的...所以你可以使用GET路线从Slim拉出来并使用php-view或twig-view来渲染你的HTML。
4 年多之前 回复
duangua6912
duangua6912 我有一个移动应用程序,可以阅读博客文章(最初从网站发布)并使用HTML呈现它们
4 年多之前 回复
dongxing5525
dongxing5525 为什么要尝试将HTML作为JSON返回?字面意义毫无意义。
4 年多之前 回复
dpj997991
dpj997991 我使用angularjshttp请求,奇怪的是当我在不同的表(一个没有大内容的一个)上使用相同的api调用时,它工作得很好
4 年多之前 回复
duanqiao1947
duanqiao1947 我知道了。长度可能是一个问题,或者您的JSON问题恰好发生在较长的字符串上可能是巧合。现在,我们现在假设两种情况。请告诉我你如何在客户端使用JSON,你在哪里回应它?或者它是对AJAX请求的响应?
4 年多之前 回复
drvxnivoqf17568697
drvxnivoqf17568697 原始数据太长而无法在此处共享,返回的json最后缺少'}]'。JSONLint错误:'期待'}',','得到'EOF''但是当我将结果限制为少量帖子时,它返回一个有效的JSON
4 年多之前 回复
dsigh7478
dsigh7478 让我们确保您的问题是可重现的。由于您遇到问题,我相信您有一个可以重现问题的原始数据。请与我们分享。然后显示从那里生成的JSON是什么。那么请通过检查网络选项卡告诉我们浏览器收到了什么。那么请描述如何检测到问题?你最后得到的HTML无效吗?如果是这样,您的JSON应该是包含在撇号和/或引号中的属性值。您指定var_dump返回您期望的内容。你确定在转发时出现问题吗?
4 年多之前 回复
doushuangai9733
doushuangai9733 您可能在路径之前或$app->run()之后回显两个字符,很可能是空格
4 年多之前 回复
doufang1954
doufang1954 我刚刚注意到最后返回的JSON缺少'}]',内容是否可能太长而无法作为字符串传输?
4 年多之前 回复
doudang1052
doudang1052 我们可以在$resp中获取内容的示例吗?
4 年多之前 回复
dongzong5017
dongzong5017 出于好奇......“返回一个糟糕的json”究竟意味着什么?
4 年多之前 回复
duangaixing1509
duangaixing1509 因为它试图将html编码为字符串,“html中的字符可能导致问题,尝试在$response->withJson()中包含选项JSON_HEX_QUOT作为$encodingOptions参数;即类似于$response->withJson($RESP,201,JSON_HEX_QUOT);
4 年多之前 回复

5个回答



如果你在结束时缺少}] </ code>,那么你的一个PHP文件有两个空格(或者 开头之前&lt;?php </ code>。</ p>

另一种解决方案是替换你的 $ app-&gt; run()</ code> with:</ p>

  $ response = $ app-&gt; run(true);  //无声模式,不会发送响应
$ response = $ response-&gt; withoutHeader(“Content-Length”); //删除Content-Length
$ app-&gt; response($ response); //现在我们发送响应
</ code> </ pre>

希望我们在下一个版本中有一个正确的解决方法!</ p>
</ div>

展开原文

原文

If you are missing }] at then end, then one of your PHP files has two spaces (or new lines) before the opening <?php.

Another solution is to replace your $app->run() with:

$response = $app->run(true); //Silent mode, wont send the response
$response = $response->withoutHeader("Content-Length"); //Remove the Content-Length
$app->respond($response); //Now we send the response

Hopefully, we'll have a proper fix in the next version!

doujing5937
doujing5937 我不知道 - 我倾向于使用卷曲!
4 年多之前 回复
douye4051
douye4051 非常好点。 出于好奇,应该在浏览器网络窗格中显示完整响应还是完全丢弃?
4 年多之前 回复



字符编码可能存在问题。 你试过这个吗?</ p>

  json_encode($ array,JSON_UNESCAPED_UNICODE)
</ code> </ pre>

任何以UTF编码方式返回PHPjson_encode的方法 -8而不是Unicode?</​​a> </ p>
</ div>

展开原文

原文

Maybe a problem with the characters codification. Have you tried this?

json_encode($array, JSON_UNESCAPED_UNICODE)

Any way to return PHP `json_encode` with encode UTF-8 and not Unicode?

dswqz24846
dswqz24846 所以...修补Slim核心来注入原始的UTF-8字符(而不是简单的7位ASCII)将修复“糟糕的JSON”? 究竟怎么样?
4 年多之前 回复



据我所知,Slim并不关心进行错误检查:</ p>

  / ** 

  • Json。
  • *注意:此方法不是PSR-7标准的一部分。
  • *此方法准备响应对象以返回HTTP Json *响应 @ n *
  • @param mixed $ data数据
  • @param int $ status HTTP状态代码。
  • @param int $ encodingOptions Json编码选项
  • @return self
  • / public function withJson($ data,$ status = 200,$ encodingOptions = 0) { $ body = $ this-&gt; getBody(); $ body-&gt; rewind(); $ body-&gt; write(json_encode($ data,$ encodingOptions));

返回$ this-&gt; withStatus($ status) - &gt; withHeader('Content-Type','application / json; charset = utf -8');
}
</ code> </ pre>

...所以你需要自己动手。 最低限度是调用 json_last_error()。</ p>
</ div>

展开原文

原文

As far as I can tell, Slim does not care doing error checking:

/**
 * Json.
 *
 * Note: This method is not part of the PSR-7 standard.
 *
 * This method prepares the response object to return an HTTP Json
 * response to the client.
 *
 * @param  mixed  $data   The data
 * @param  int    $status The HTTP status code.
 * @param  int    $encodingOptions Json encoding options
 * @return self
 */
public function withJson($data, $status = 200, $encodingOptions = 0)
{
    $body = $this->getBody();
    $body->rewind();
    $body->write(json_encode($data, $encodingOptions));

    return $this->withStatus($status)->withHeader('Content-Type', 'application/json;charset=utf-8');
}

... so you'll need to do it yourself. The bare minimum is a call to json_last_error().



因为它试图将html编码为JSON中的字符串,所以html中的“</ code>字符可能会导致 尝试包含选项JSON_HEX_QUOT作为第三个参数。</ p>

  $ response-&gt; withJson($ resp,201,JSON_HEX_QUOT); 
</ code> </ pre >

这会将html中的“</ code>字符转义为unicode文字 \ u0022 </ code>,从而防止冲突。</ p>
</ div >

展开原文

原文

Because it's attempting to encode html into strings in JSON, the " characters in the html are probably causing the issue. Try including the option JSON_HEX_QUOT as the 3rd parameter.

$response->withJson($resp,201,JSON_HEX_QUOT);

This will escape the " character in the html to the unicode literal \u0022, preventing clashes.

douxin9135
douxin9135 可能有其他事情导致他的问题,但没有一个他正在转换的例子,很难说。 我之前用它来解决JSON中的转义问题,特别是双引号和反斜杠。
4 年多之前 回复
duanchu2607
duanchu2607 我刚试过你的解决方案,但仍然是同样的问题。
4 年多之前 回复
duanjunao9348
duanjunao9348 如果你浏览Slim源代码,你会发现它没有自己的JSON编码器; withJson()只不过是对本机json_encode()的调用,它可以从经验中告诉你 - 工作正常,尤其是。 用简单的双引号。
4 年多之前 回复



你可能想要的东西。</ p>


  1. 使用<可以渲染HTML code> slim / php-view </ code>或 slim / twig-view </ code> </ li>
  2. 使用AJAX提取HTML并将其放入移动应用程序。</ li >
    </ ol>

    使用JSON是愚蠢的,因为您仍需要服务器端呈现HTML,然后将其打包成JSON格式。 这样做通常是一个坏主意,因为规范中的JSON只接受UTF-8而且没有办法解决这个问题。</ p>
    </ div>

展开原文

原文

What you likely want.

  1. Rendering HTML is possible by using slim/php-view or slim/twig-view
  2. Use AJAX to pull the HTML and place it in your mobile app.

Using JSON is silly since you still have to server side render the HTML, then package it up into a JSON format. Doing this is generally a bad idea since JSON in the spec will only accept UTF-8 and there's no way around that.

doushengyou2617
doushengyou2617 他可能需要包含元数据或做一些简单的事情,例如同时检索多个项目(纯HTML响应意味着每个项目有一个HTTP连接)。 拥有干净的JSON API并不一定是无稽之谈。 但除此之外,我认为这应该是作为评论发布而不是回答。 当您的代码出现问题时,您只需修复它,而不是转储整个设计。
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐