PHP转义......怎么做? ......我需要一些基础知识

时间:2016-12-03 19:30:16

标签: php wordpress

过去几天我在谷歌上搜索PHP中的“转义”。 我对此有了一些了解,为什么你必须逃避事情。

我学过PHP,但我们没有学到任何关于转义的知识。 几周前我第一次听到这个消息......

目前我用wordpress制作了一个项目。 (插件-dev的) 该插件的代码几乎准备就绪,但我没有逃脱任何事情! 我现在想做,但据我所知,这是不正确的。

php.net上记录了几个转义函数。 wordpress中包含一些转义函数。 (esc_html(),esc_url(),esc_attr(),...)

我创建了一个简短无意义的代码示例,它还包含Wordpress i18n函数。

如果有人能告诉我如何根据代码示例应用转义,那对我来说将是一个很大的帮助。

我会对它有所了解并在我的项目中采用它。

<h1><?php echo "This is my heading"; ?></h1>

<a href="<?php echo $url ?>"><?php _e( 'my link', 'TextDomain' ); ?></a>

<div class="panel panel-info<?php if ( $design_animation != " " ) { echo " animated " . $design_animation; } ?>">

  <div class="panel-heading">
    <h3 class="panel-title">   
      <i class="fa fa-info-circle"></i> <?php _e( 'This is the panel-title', 'TextDomain' ); ?>   
    </h3>
  </div><!--/.panel-heading-->

  <div class="panel-body">

    <?php echo "<div class='alert " . $AlertClass . "'>" . $AlertText . "</div>"; ?>

    <div class="form-group">
      <label for="duration" class="col-sm-3 control-label"><?php _e( 'Duration', 'TextDomain' ); ?>:</label>
      <div class="col-sm-9">
        <div class="input-group">

          <select class="form-control <?php echo $class ?>" name="duration" id="duration" required<?php echo $FormElementState; ?>>

          <?php

            $query_sql=$ wpdb->prepare( "SELECT blabla ..." ,$variable );
            $query = $wpdb->get_results( $query_sql, ARRAY_A ); 

            foreach($query as $row) { echo "<option value='" . $row["duration"] . "'>" . $row["duration"] . "" . __( 'Minuten', 'TextDomain' ) . "</option>";

          ?>

          </select>

        </div>
      </div>
    </div>

<textarea rows="4" cols="50">
  <?php echo $MyTextFromDatabase ?>
</textarea>

  

编辑:

在上面的例子中:变量“$ design_animation”来自DB。该值不可由用户编辑。它被用作课程。我必须逃脱吗?

变量“$ row [”duration“]”来自DB。它是一个计算的整数。我必须逃脱吗?

在Wordpress中有逃避i18n翻译的功能。 i18n翻译始终在我的代码中,不会来自数据库或表单。它们为什么存在?

谢谢!!!

1 个答案:

答案 0 :(得分:0)

如果数据来自用户输入并在php代码中处理,则可以使用addslashes将其转义。 (如果启用了magic_quotes_gpc,则没有必要)

如果它来自用户输入以便将其保存到数据库中,您可以考虑将预准备语句与PDO一起使用,或mysqli_real_escape_string使用较旧的API。