【问题标题】:Escape when echoed回声时逃跑
【发布时间】:2022-06-13 19:56:53
【问题描述】:

我一直在尝试提交插件以供审核,但一直遇到回声线问题。 我上次发的版本是这样的。

<option value="">
    <?php _e( '- Default', MF_TEXT_DOMAIN ); ?>
</option>
<?php foreach ( $folders as $folder ) {
    $folder = trim( $folder );
    $folder = esc_attr( $folder );
    echo "<option value=\"{$folder}\">{$folder}</option>";
} ?>

WordPress 的回应是:

这没有转义:

echo "<option value=\"{$folder}\">{$folder}</option>";

$folder 在回显时必须转义。

现在我准备再次提交代码以供审核,但首先我想确保我是正确的。

这里是新代码

<option value="">
    <?php _e( '- Default', MF_TEXT_DOMAIN ); ?>
</option>
<?php foreach ( $folders as $folder ) {
    $folder = trim( $folder );
    echo '<option value="' . esc_attr( $folder ) . '">' . esc_attr( $folder ) . '</option>';
} ?>

如果有人可以提供帮助,我将不胜感激,因为我对(转义)有点困惑。

【问题讨论】:

    标签: php wordpress escaping echo wordpress-plugin-creation


    【解决方案1】:

    根据开发者文档,出于安全原因,所有内容都必须进行转义。以下是WordPress为不同数据提供的转义功能:

    esc_attr()      // Use on everything else that’s printed into an HTML element’s attribute.
    esc_html()      // Use anytime an HTML element encloses a section of data being displayed. This WILL NOT display HTML content, it is meant for being used inside HTML and will remove your HTML.
    esc_js()        // Use for inline Javascript.
    esc_textarea()  // Use this to encode text for use inside a textarea element.
    esc_url()       // Use on all URLs, including those in the src and href attributes of an HTML element.
    esc_url_raw()   // Use when storing a URL in the database or in other cases where non-encoded URLs are needed.
    wp_kses()       // Use to safely escape for all non-trusted HTML (post text, comment text, etc.)
    wp_kses_post()  // Alternative version of wp_kses() that automatically allows all HTML that is permitted in post content.
    wp_kses_data()  // Alternative version of wp_kses() that allows only the HTML permitted in post comments.
    

    如果你想了解更多,这里是官方文档。

    https://developer.wordpress.org/plugins/security/securing-output/

    【讨论】:

    • 感谢您的回复和文档,虽然我已经去过那里...考虑到该文档,您认为我正确实施了吗?
    • 想说同样的话。任何输出或估算的内容都必须由 wp 本机函数进行转义/清理。你的最后一个例子似乎很好。您可能还想让字符串可翻译。
    • @choseɳ - 是的,您的代码似乎被很好地转义了。
    【解决方案2】:

    我想你已经找到你的答案了

    <option value="">
        <?php esc_html_e( '- Default', MF_TEXT_DOMAIN ); ?>
    </option>
    <?php foreach ( $folders as $folder ) {
        $folder = trim( $folder );
        echo '<option value="' . esc_attr( $folder ) . '">' . esc_html( $folder ) . '</option>';
    } ?>
    

    您必须转义将在前视图中显示的选项文本,然后必须通过 esc_html 对其进行转义。在第一行中,您可以看到我已经使用 esc_html_e 转义了 _e 函数,因为还需要转义所有静态文本。

    最后,为了获得最佳实践,我总是在 html 部分使用 html 代码,在 php 标签区域使用 php 代码。这是为了更好理解而优化的代码。

    <option value="">
        <?php esc_html_e( '- Default', MF_TEXT_DOMAIN ); ?>
    </option>
    <?php foreach ( $folders as $folder ) {
        $folder = trim( $folder );
        ?>
        <option value="<?php echo esc_attr( $folder ); ?>"><?php echo esc_html( $folder ); ?></option>
    <?php } ?>
    

    可能需要更多的 php 标签,但最好将代码分别放置为 php 和 html。希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2017-07-21
      • 2014-12-26
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多