Heim >Backend-Entwicklung >PHP-Tutorial >_关于微信接口上传图文素材时与html标签的冲突问题。

_关于微信接口上传图文素材时与html标签的冲突问题。

WBOY
WBOYOriginal
2016-06-23 13:47:591233Durchsuche

本人初入微信开发不久,这几天在研究微信高级群发接口遇到了问题。
文档示例:
{
   "articles": [
 {
                        "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
                        "author":"xxx",
 "title":"Happy Day",
 "content_source_url":"www.qq.com",
 "content":"content",
 "digest":"digest",
                        "show_cover_pic":"1"
 },
 {
                        "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
                        "author":"xxx",
 "title":"Happy Day",
 "content_source_url":"www.qq.com",
 "content":"content",
 "digest":"digest",
                        "show_cover_pic":"0"
 }
   ]
}
在上传多图文素材时如果content的内容是纯文本是,可以上传成功,得到media_id,然后通过群发接口,手机可以正确获得多图文信息。
可是如果content里面的内容含有html的标签,如

,

,等等时,上传后虽然也能获得media_id,群发后,手机得到的
是单图文,而且这个单图文 有图片,标题,链接,就是没有具体内容。也就是content是空的。
下面代码,$news为多图文数组,我在json_encode前进数组进行了urlencode。
foreach ($news as &$item){
foreach ($item as $k=>$v){
$item[$k]=urlencode($v);
}
}     

$data=array("articles"=>$news);                
$data=json_encode($data);


回复讨论(解决方案)

我试过如果在json_encode之前不对数组做urlencode的话,是能收到多图文,图文,标题,什么的也显示正常,但是图文里面的具体内容就变成了,"u56fd\u4f01\u4e1a\u6240\u5f97\u7a0e\u6cd5\u5b9e\u65bd\u6761\u4f8b\u300b\u7b2c\u4e5d\u5341\u4e8c\u6761\u89c4\u5b9a\uff0c............",难道微信的服务端收到上传图文信息后,不会对其进行json_decode么?
想不明白。

在线等,请各们高手帮帮忙!

虽然没人回答,但我还是终于解决了。
content里面的内空如果含有html标签的话,需要对内容进行一下转义。如果里面含有style=".."类似于这样的带""号的内容的话,
就更需要注意了。
foreach ($news as &$item){
foreach ($item as $k=>$v){
if($k =='content'){
$item[$k] = urlencode(htmlspecialchars(str_replace("\"","'",$v)));
}else{
$item[$k] = urlencode($v);
}
}
}
就是要对html里面的“”引号先转成单引号,然后再将其转成html实体,这样在进行urlencode的时候就不会影响到标签了。
$data=array("articles"=>$news);
                $data=json_encode($data);
                $end_data= urldecode($data);
                $end_data= htmlspecialchars_decode($end_data);
上传之前再对内容进行urldecode和将html实体转成html标签,这样就OK了。
测试过的!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn