WordPress entfernt das Attribut „data“ aus dem base64-codierten Bild, wenn wp_insert_post verwendet wird

Lesezeit: 4 Minuten

Benutzeravatar von Mustafa Demir
Mustafa Demir

Bearbeiten 1

Das liegt nicht am Browser. Dies passiert, wenn ich nicht angemeldet bin. Wenn ich mich angemeldet habe, funktioniert es einwandfrei. Entschuldige die Eile.

Ich weiß, es ist seltsam und macht keinen Sinn, auch schwer zu erklären.

Wie der Titel schon sagte, verursacht der Browser dieses Problem, aber ich bin mir nicht sicher.

Ich habe also einen Bilddienst, der einige Daten von irgendwoher liest und anhand der gelesenen Daten Bilder erstellt. Dann macht es ein paar Dinge und gibt die Bilder im base64-Format zurück, damit ich die Bilder auf meiner Website verwenden kann. Dieser Prozess beginnt, sobald ich eine Seite meiner Website öffne.

Das Problem ist, dass wenn ich die Seite in Safari öffne, es richtig funktioniert, aber heute habe ich versucht, die Seite in Chrome zu öffnen und Bilder wurden nicht geladen. Also habe ich die Bilder überprüft und festgestellt, dass es keine gibt data -Attribut am Anfang des Daten-URI.

Lassen Sie es mich anhand eines Beispiels erklären;

Hier ist mein Code beim Erstellen der HTML-Vorlage

  presets += `<div class="icon"> <img src="data:image/png;base64,${icon}"></div>`
  presets += `<p class="name">${name}</p>`
  presets += `<div class="image"> <img src="data:image/png;base64,${image}"/></div>`

Ich mache ein paar Dinge und gebe dann diese Daten zurück und auf Postbote und Safari erhalte ich dieses Ergebnis:

<div class="icon"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA{ ... }"></div>

Das ist also in Ordnung. Daran ist nichts falsch.

Aber wenn ich die Seite in Chrome oder Opera öffne, bekomme ich das;

<div class="icon"> <img src="https://stackoverflow.com/questions/59089442/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA{ ... }"></div>

Sehen? Nein data Attribut. Ich füge einen Beitrag in WordPress ein und dies ist der Inhalt des Beitrags. Warum passiert das? Ich hoffe, ich habe mich klar erklärt.

Bearbeiten 2

Dies ist die Funktion, die ich verwendet habe, um einen Beitrag einzufügen

function programmatically_create_post($title, $content, $slug)
{

    // Setup the author,
    $author_id = 4;

    // If the page doesn't already exist, then create it
    if (!the_slug_exists($slug)) {

            // Set the post ID so that we know the post was created successfully
            wp_insert_post( 
                    array(  
                            'post_title'            =>      $title,
                            'post_content'          =>      $content,
                            'comment_status'        =>      'closed',
                            'ping_status'           =>      'closed',
                            'post_author'           =>      $author_id,
                            'post_name'             =>      $slug,  
                            'post_status'           =>      'publish',
                            'post_type'             =>      'post', 
                            'page_template'         =>      'dynamic-post.php',
                            'post_category'         =>      array(1,60)
                         )
            );
            // Redirect user to the post after the post created
            wp_redirect(get_site_url() . '/blog/' . $slug);
            exit();
            // Otherwise, we'll stop
    } else {
            return;
    } // end if

} // end programmatically_create_post

  • Ich füge einen Beitrag in WordPress ein und dies ist der Inhalt des Beitrags. – Wie einfügen? Verwenden Sie das CMS? Verwenden Sie die API? Direkt in die DB? Offensichtlich entfernt etwas diesen Inhalt, es wäre nützlich, den Prozess, den Sie Schritt für Schritt durchführen, zu verstehen und mehr von Ihrem Code zu sehen …

    – naththedeveloper

    28. November 2019 um 14:40 Uhr

  • Und wann wird es abgebaut? Während der Anzeige oder beim Speichern des neuen Beitrags? dh tut die data: Präfix erscheint in Ihrer Datenbank?

    – naththedeveloper

    28. November 2019 um 14:42 Uhr

  • Nein, es erscheint nicht in meiner DB. Ich benutze wp_insert_post Funktion einzufügen. Es wurde beim Speichern des neuen Beitrags entfernt

    – Mustafa Demir

    28. November 2019 um 14:44 Uhr

  • Ich denke auch, dass es um die Sicherheitssache von WordPress geht. Also habe ich die folgende Funktion in meine functions.php eingefügt, aber kein Glück if ( ! function_exists( 'extend_allowed_html_tags' ) ) { function extend_allowed_html_tags() { global $allowedposttags; $allowedposttags['img']['data'] = true; } } add_action( 'init', 'extend_allowed_html_tags');

    – Mustafa Demir

    28. November 2019 um 14:47 Uhr

  • @naththedeveloper Ich habe meine Frage aktualisiert. Ich habe ein paar Dinge ausprobiert, wie das Zulassen von HTML-Tags, aber es hat überhaupt nicht funktioniert.

    – Mustafa Demir

    28. November 2019 um 15:44 Uhr

Nun, das war ein Albtraum zu finden, aber ich glaube, ich habe es gelöst, nachdem ich den WordPress-Code durchsucht habe, der sich einklinkt wp_insert_post. Bitte fügen Sie dies Ihrer hinzu functions.php Datei und überprüfen Sie, ob es funktioniert:

add_filter('kses_allowed_protocols', function ($protocols) {
    $protocols[] = 'data';

    return $protocols;
});

Im Wesentlichen gibt es intern in WordPress einen Filter, der das Protokoll aller URLs im Inhalt überprüft und alle entfernt, die ihm nicht gefallen. Standardmäßig unterstützt die unterstützte Liste das Datenprotokoll nicht. Die obige Funktion fügt es einfach der Liste der unterstützten Protokolle hinzu.

Dieser Filter wird nicht ausgeführt, wenn Sie ein Administrator sind, weshalb Sie dieses Problem wahrscheinlich nur sehen, wenn Sie abgemeldet sind.

  • Vielen Dank für Ihre Mühen. Ich habe Ihren Code in mein Thema hinzugefügt functions.php aber hat nicht funktioniert. Es ist immer noch dasselbe

    – Mustafa Demir

    28. November 2019 um 16:06 Uhr

  • Ich schätze, Änderungen wirken sich ein paar Minuten später aus. Ich habe das jetzt ausprobiert und es funktioniert. Nochmal vielen Dank.

    – Mustafa Demir

    28. November 2019 um 19:03 Uhr

  • Danke dafür. Würde es nie erraten.

    – Teebx

    13. Juli 2021 um 15:52 Uhr

1435160cookie-checkWordPress entfernt das Attribut „data“ aus dem base64-codierten Bild, wenn wp_insert_post verwendet wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy