【问题标题】:strip_tags truncating JSONstrip_tags 截断 JSON
【发布时间】:2013-04-16 20:10:42
【问题描述】:

我有一个这样的 JSON 响应:

 {
  "id":"2461",
  "name":"GEORGIA INSTITUTE OF <leo_highlight style=border-bottom: 2px solid rgb(255, 255, 150); background-c",
  "logo":"",
  "address":null,
  "city":null,
  "state":null,
  "campus_uri":"{{PATH}}2461\/"
 },
 ....
 ....

当我在这个上执行strip_tgs 时,整个 JSON 字符串在上面的 name 标记处被截断。 JSON 字符串如下所示。

{"id":"2461","name":"GEORGIA INSTITUTE OF 

这条线以下的一切都消失了。这是一个巨大的 JSON。但它在这里被截断。 关于做什么的任何想法?我需要去掉所有的 HTML 标签。

更新: 添加更多细节...

我得到的这个 JSON 字符串来自对查询结果数组的编码。因此,我从 MySQL 查询中获取数组,并使用 json_encode 对其进行编码,并尝试在其上使用 strip_tags

【问题讨论】:

  • 问题是名称有&lt; 没有匹配的&gt;。所以看起来标签永远不会结束。
  • 是的,我看到了这个问题。但它不应该在该行之后剥离整个字符串?
  • 好吧,如果你控制了 JSON 的创建,为什么不在序列化之前去掉标签呢?
  • 为什么不应该呢?允许标签跨越多行。 strip_tags 不知道这是 JSON,此函数旨在用于 HTML 数据。
  • @Barmar。我同意这一点。这里的字符串不同。如果没有结束标记,那么我想它不应该将其视为 HTML 标记或不剥离它。

标签: php json string strip-tags truncated


【解决方案1】:
$array = json_decode($json, true);
array_walk_recursive($array, function (&$val) { $val = strip_tags($val); });
$json = json_encode($json);

很简单...解码、遍历和编码。

【讨论】:

  • @KevinRave 然后在编码之前执行我的 array_walk_recursive 调用,一切正常 - 而不是在编码之后使用 strip_tags
  • 这是如何工作的?您是否分别对每个 JSON 对象的每个元素进行编码?抱歉,试图了解它的作用。
  • @KevinRave array_walk_recursive 是一种使用回调的深度 foreach。它通过引用更改整个数组的每个非数组条目。另见php.net/manual/en/function.array-walk-recursive.php
  • Array ( [123] =&gt; Array ( [123] =&gt; asdfasd))格式有效吗?
  • @KevinRave 它应该适用于每个阵列。 (也适用于多维数组)
【解决方案2】:

解码 JSON 对象后去掉标签。您可能会以一种懒惰的方式(即在需要时)执行此操作,而不是遍历每个项目,并在所有字段上剥离标签。

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2014-08-31
    • 2018-07-22
    相关资源
    最近更新 更多