Ich bin verwirrt über URL-Bereinigung in Meta-Boxen

Ich mache eine Meta-Box für einen benutzerdefinierten Beitrag und diese Metabox enthält einen href-Wert. Ich brauche keine validation, da dies ein gültiger href-Wert ist, aber ich möchte dies auf sichere Weise tun.

Ich habe meine Meta-Box mit diesem Tutorial erstellt .

In dem Teil, wo die Eingabe zu esc_url_raw() ich esc_url_raw() und es scheint gut zu funktionieren, aber der Codex sagt auf esc_url_raw() :

Diese function kann nicht zur Anzeige der URL verwendet werden, verwenden esc_url() stattdessen esc_url()

Also sollte ich esc_url() oder gibt es etwas anderes , das ich verwenden sollte, und wenn ja, warum sollte ich in diesem Fall nicht esc_url_raw() ?

Mein Code:

 /* Get the posted data and sanitize it */ $new_meta_value = ( isset( $_POST['mod-modbox-link'] ) ? esc_url_raw( $_POST['mod-modbox-link'] ) : '' ); 

Ich bekomme die URLs auf Seiten mit:

 $my_link = get_post_meta( $post->ID, 'mod_modbox_link', true ); 

Solutions Collecting From Web of "Ich bin verwirrt über URL-Bereinigung in Meta-Boxen"

Die Wahl zwischen esc_url und esc_url_raw hängt von der Verwendung der URL ab.

Wenn Sie die URL verwenden müssen, um in HTML esc_url , verwenden Sie esc_url , esc_url :

 $my_link = get_post_meta( $post->ID, 'mod_modbox_link', true ); echo 'Open link' 

esc_url_raw sollte für jede andere Verwendung verwendet werden, bei der die URL als gültige URL behandelt werden soll, zB Redirect:

 $my_link = get_post_meta( $post->ID, 'mod_modbox_link', true ); wp_redirect( esc_url_raw($my_link) ); 

oder HTTP-API- functionen:

 $my_link = get_post_meta( $post->ID, 'mod_modbox_link', true ); $response = wp_remote_get( esc_url_raw($my_link) ); 

Dies liegt daran, dass esc_url spezielle Eigenschaften in ihren codierten Versionen esc_url_raw , esc_url_raw nicht. Wenn Ihre URL z. B. http://example.com/index.php?foo=bar&bar=baz , ist dies eine vollständige gültige URL. Wenn Sie esc_url das & in & nicht konvertiert, wenn Sie esc_url_raw .

Codex sagen, esc_url_raw auch zu verwenden, um URL in db zu speichern, und in Ihrem Fall wird das esc_url_raw in database gespeichert, also sollten Sie esc_url_raw wenn Sie das Meta einstellen:

 $link = isset($_POST['meta']) ? esc_url_raw($_POST['meta']) : ''; update_post_meta( $post_id, 'mod_modbox_link', $link ); 

Wenn Sie es dann abrufen, verwenden Sie esc_url_raw oder esc_url entsprechend Ihren Anforderungen: Wenn Sie im HTML- esc_url drucken müssen, verwenden Sie esc_url andernfalls verwenden Sie esc_url_raw .