Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann das Problem gelöst werden, dass der Inhalt verloren geht, wenn PHP grafische Nachrichten mit mehreren Bildern auf die öffentliche WeChat-Plattform hochlädt?

Wie kann das Problem gelöst werden, dass der Inhalt verloren geht, wenn PHP grafische Nachrichten mit mehreren Bildern auf die öffentliche WeChat-Plattform hochlädt?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-08-08 09:06:38
Original
1782 Leute haben es durchsucht

1. Frage:
Laden Sie einen Artikel in WordPress als permanentes Material auf WeChat hoch:
Wenn der Artikel nur ein Bild enthält, kann es normal hochgeladen werden, und wenn Sie dieses Material auf der öffentlichen WeChat-Plattform anzeigen , Textinhalte und Bilder können vollständig angezeigt werden.
Fügen Sie dem Artikel ein weiteres Bild hinzu (wenn das Artikelbild größer als 1 ist). Beim Betrachten dieses Materials im WeChat-Hintergrund wird festgestellt, dass der Artikel unvollständig ist: Der gesamte Inhalt ab dem ersten Bild geht verloren.
Zusätzliche Hinweise:
(1) Ich habe ein Plug-in geschrieben, um WordPress-Artikel in die WeChat-Materialbibliothek hochzuladen.
Hauptprozess: Curl erfasst das Bild im Artikel und lädt es in die WeChat-Materialbibliothek hoch, ruft die URL ab und ersetzt dann die Bildquelle im WordPress-Artikel entsprechend.
Erstellen Sie dann eine JSON-Zeichenfolge aus Bild und Textnachricht und laden Sie sie auf WeChat hoch.
(2) Dem WordPress-Artikel werden keine Stile hinzugefügt, nur

, -Tags
2, Code:

<code>// 上传图文消息代码
$raw = Curl::curl_post_wx( 'https://api.weixin.qq.com/cgi-bin/material/add_news?access_token='
    . $token, self::json_article( $post_ids, $token ), false );

/**
 * 将文章内容构造成json字符串
 *
 * @param array $post_ids
 * @param string $token
 * @return string json
 */
private function json_article( $post_ids, $token ) {
    $mp_article = '{"articles":[';
    foreach ( $post_ids as $post_id ) {
        $post = get_post( $post_id );
        $post_urls = self::preg_match_src( $post->post_content );
        if ( $post_urls ) {
            // 如果文章中有图片,将文章中的图片上传至微信素材库
            foreach ( $post_urls as $post_url ) {
                if ( strpos( $post_url, 'qpic.cn' ) === false ) {
                    // 如果图片没有上传到微信服务器
                    $res = Curl::curl_post_wx( 'https://api.weixin.qq.com/cgi-bin/material/add_material?'
                        . 'access_token=' . $token . '&type=image', false, Curl::curl_get_img( $post_url ) );
                    //替换文章内容img中的src地址
                    $post->post_content = str_replace( $post_url, $res['url'], $post->post_content );
                }
                $post->post_content = str_replace( '"', '\"', $post->post_content );
            }
        }

        // 获取缩略图并上传
        // 相应的code省略

        // 构造json
        $mp_article .= '{
            "title": "' . $post->post_title . '",
            "content_source_url": "' . get_permalink( $post_id, false ) . '",
            "thumb_media_id": "' . $thumb_res['media_id'] . '",
            "content": "' . htmlspecialchars_decode( $post->post_content ) . '",
            "show_cover_pic": 0,
        ';
        if ( !empty($post->post_excerpt ) ) {
            $mp_article .= '"digest": "' . $post->post_excerpt . '",';
        }
        $mp_article .= '},';
    }

    return rtrim($mp_article, ',') . ']}';
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

3. Fehlermeldung: WeChat hat keine Fehlermeldung zurückgegeben.
4, Screenshot: Keine.
5, andere Referenzen:
Ich habe gesehen, dass tilun_099 auf ähnliche Probleme im CSDN gestoßen ist: http://bbs.csdn.net/topics/39....
Das Problem mit tilun_099 ist: „Wenn beim Hochladen von Materialien mit mehreren Bildern und Texten der Inhalt einfacher Text ist, kann der Upload erfolgreich sein, die media_id kann abgerufen werden und dann über die Gruppensendeschnittstelle die Das Mobiltelefon kann die Mehrbild- und Textinformationen korrekt abrufen. Wenn der Inhalt jedoch HTML-Tags wie

,

usw. enthält, kann die media_id nach dem Hochladen abgerufen werden Nach dem Massenversand erhält das Mobiltelefon ein einzelnes Bild und einen einzelnen Text. Der Link enthält keinen spezifischen Inhalt. „
Die endgültige Lösung von tilun_099 sein Problem: „Obwohl niemand geantwortet hat, habe ich endlich das Problem gelöst, wenn der Inhalt HTML-Tags enthält. Wenn ja, müssen Sie den Inhalt maskieren. Wenn er Inhalte mit style=".." und "" enthält, müssen Sie bezahlen mehr Aufmerksamkeit darauf richten.

<code>foreach ($news as &$item){
    foreach ($item as $k=>$v){
        if($k =='content'){
            $item[$k] = urlencode(htmlspecialchars(str_replace("\"","'",$v)));
            }else{
                $item[$k] = urlencode($v);
            }
        }
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren
Es ist notwendig, die „“-Anführungszeichen in HTML zunächst in einfache Anführungszeichen und dann in HTML-Entitäten umzuwandeln, damit die Tags bei der URL-Codierung nicht beeinträchtigt werden.

<code>$data=array("articles"=>$news);
    $data=json_encode($data);
    $end_data= urldecode($data);
    $end_data= htmlspecialchars_decode($end_data);</code>
Nach dem Login kopieren
Nach dem Login kopieren
Vor dem Hochladen den Inhalt urldecodieren und die HTML-Entitäten in HTML-Tags konvertieren, dann ist alles in Ordnung.

Getestet! ”

Das Problem, auf das er und ich gestoßen sind, ist etwas ähnlich, aber nicht genau das gleiche. Ich habe JSON direkt erstellt.

Antwortinhalt:

1. Frage:

Laden Sie einen Artikel in WordPress als permanentes Material auf WeChat hoch:
Wenn der Artikel nur ein Bild enthält, kann es normal hochgeladen werden, und wenn Sie dieses Material auf der öffentlichen WeChat-Plattform anzeigen , Textinhalte und Bilder können vollständig angezeigt werden.
Fügen Sie dem Artikel ein weiteres Bild hinzu (wenn das Artikelbild größer als 1 ist). Beim Betrachten dieses Materials im WeChat-Hintergrund wird festgestellt, dass der Artikel unvollständig ist: Der gesamte Inhalt ab dem ersten Bild geht verloren.
Zusätzliche Hinweise:
(1) Ich habe ein Plug-in geschrieben, um WordPress-Artikel in die WeChat-Materialbibliothek hochzuladen.
Hauptprozess: Curl erfasst das Bild im Artikel und lädt es in die WeChat-Materialbibliothek hoch, ruft die URL ab und ersetzt dann die Bildquelle im WordPress-Artikel entsprechend.
Erstellen Sie dann eine JSON-Zeichenfolge aus Bild und Textnachricht und laden Sie sie auf WeChat hoch.
(2) Dem WordPress-Artikel werden keine Stile hinzugefügt, nur

, -Tags
2, Code:

<code>// 上传图文消息代码
$raw = Curl::curl_post_wx( 'https://api.weixin.qq.com/cgi-bin/material/add_news?access_token='
    . $token, self::json_article( $post_ids, $token ), false );

/**
 * 将文章内容构造成json字符串
 *
 * @param array $post_ids
 * @param string $token
 * @return string json
 */
private function json_article( $post_ids, $token ) {
    $mp_article = '{"articles":[';
    foreach ( $post_ids as $post_id ) {
        $post = get_post( $post_id );
        $post_urls = self::preg_match_src( $post->post_content );
        if ( $post_urls ) {
            // 如果文章中有图片,将文章中的图片上传至微信素材库
            foreach ( $post_urls as $post_url ) {
                if ( strpos( $post_url, 'qpic.cn' ) === false ) {
                    // 如果图片没有上传到微信服务器
                    $res = Curl::curl_post_wx( 'https://api.weixin.qq.com/cgi-bin/material/add_material?'
                        . 'access_token=' . $token . '&type=image', false, Curl::curl_get_img( $post_url ) );
                    //替换文章内容img中的src地址
                    $post->post_content = str_replace( $post_url, $res['url'], $post->post_content );
                }
                $post->post_content = str_replace( '"', '\"', $post->post_content );
            }
        }

        // 获取缩略图并上传
        // 相应的code省略

        // 构造json
        $mp_article .= '{
            "title": "' . $post->post_title . '",
            "content_source_url": "' . get_permalink( $post_id, false ) . '",
            "thumb_media_id": "' . $thumb_res['media_id'] . '",
            "content": "' . htmlspecialchars_decode( $post->post_content ) . '",
            "show_cover_pic": 0,
        ';
        if ( !empty($post->post_excerpt ) ) {
            $mp_article .= '"digest": "' . $post->post_excerpt . '",';
        }
        $mp_article .= '},';
    }

    return rtrim($mp_article, ',') . ']}';
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
3. Fehlermeldung: WeChat hat keine Fehlermeldung zurückgegeben.

4, Screenshot: Keine.
5, andere Referenzen:
Ich habe gesehen, dass tilun_099 auf ähnliche Probleme im CSDN gestoßen ist: http://bbs.csdn.net/topics/39....
Das Problem mit tilun_099 ist: „Wenn beim Hochladen von Materialien mit mehreren Bildern und Texten der Inhalt einfacher Text ist, kann der Upload erfolgreich sein, die media_id kann abgerufen werden und dann über die Gruppensendeschnittstelle die Das Mobiltelefon kann die Mehrbild- und Textinformationen korrekt abrufen. Wenn der Inhalt jedoch HTML-Tags wie

,

usw. enthält, kann die media_id nach dem Hochladen abgerufen werden Nach dem Massenversand erhält das Mobiltelefon ein einzelnes Bild und einen einzelnen Text. Der Link enthält keinen spezifischen Inhalt. „
Die endgültige Lösung von tilun_099 sein Problem: „Obwohl niemand geantwortet hat, habe ich endlich das Problem gelöst, wenn der Inhalt HTML-Tags enthält. Wenn ja, müssen Sie den Inhalt maskieren. Wenn er Inhalte mit style=".." und "" enthält, müssen Sie bezahlen mehr Aufmerksamkeit darauf richten.

Es ist notwendig, die Anführungszeichen „“ im HTML zuerst in einfache Anführungszeichen und dann in HTML-Entitäten umzuwandeln, damit die Tags bei der URL-Codierung nicht beeinträchtigt werden.
<code>foreach ($news as &$item){
    foreach ($item as $k=>$v){
        if($k =='content'){
            $item[$k] = urlencode(htmlspecialchars(str_replace("\"","'",$v)));
            }else{
                $item[$k] = urlencode($v);
            }
        }
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren

Vor dem Hochladen den Inhalt urldecodieren und die HTML-Entitäten in HTML-Tags konvertieren, dann ist alles in Ordnung.
<code>$data=array("articles"=>$news);
    $data=json_encode($data);
    $end_data= urldecode($data);
    $end_data= htmlspecialchars_decode($end_data);</code>
Nach dem Login kopieren
Nach dem Login kopieren
Getestet! ”


Die Probleme, auf die er und ich gestoßen sind, sind etwas ähnlich, aber nicht genau die gleichen. Ich habe JSON direkt erstellt.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage