Korrekte (und sichere) Möglichkeit, URL zu umgehen, wenn das href-Attribut verwendet wird

vielleicht ist es nicht so eine große Sache, wie ich es denke, aber ich möchte href Attribut mit etwas Text entkommen. Welches dieser Beispiele ist das “richtige” – und ist es wirklich wichtig?

<?php printf( esc_html__( '%1$s and %2$s.', 'theme_name' ), 'One', 'Two' ); ?> 
 <?php printf( __('One and %2$s.', 'theme_name'), esc_url( __( 'http://example.com/' ) ), esc_html__( 'Two' ) ); ?> 

Ich frage, weil die zweite esc_url für URL verwendet, die für mich sicherer scheint als die erste.

Vielen Dank

Solutions Collecting From Web of "Korrekte (und sichere) Möglichkeit, URL zu umgehen, wenn das href-Attribut verwendet wird"

Die Verwendung von ausgehenden Daten vor der Ausgabe an den Browser stellt sicher, dass keine schädlichen (externen) Inhalte (über die Sie keine Kontrolle haben) an den Browser ausgegeben werden können und dass keine Fehler in HTML-Tags auftreten. Außerdem können übersetzte Zeichenfolgen als Escape-Zeichen verwendet werden, um sicherzustellen, dass ihre Übersetzungen keine Sonderzeichen enthalten.

In Ihrem Fall ist die zweite Option, die Sie präsentieren, besser als die erste. Anstatt den gesamten HTML-Code zu entziffern und das A Tag zu verlassen, können Sie davon ausgehen, dass Sie selbst das A Tag korrekt formatiert haben und dem Inhalt entkommen. Im Allgemeinen müssen Sie __() jedoch nicht auf eine URL anwenden, da sie keine Übersetzung enthält (wenn Sie einen Link zu einer mehrsprachigen Website fest programmiert haben, aber das ist sehr unwahrscheinlich ;-)) . Der beste Ansatz wäre:

 printf( __( 'One and %2$s.', 'theme_name'), esc_url( 'http://example.com/' ), __( 'Two' ) ); 

Dies stellt sicher, dass alle Tag-Inhalte korrekt maskiert werden, dass der gesamte Text übersetzt werden kann, und sorgt gleichzeitig für Flexibilität in den beiden Teilen des Strings. Es ist jedoch immer noch ein wenig fallabhängig.