带有转义值作为if语句的变量

时间:2018-08-28 18:44:24

标签: php

我有以下if语句:

<?php

  $title = esc_html( get_the_title() );
  $sub_title = esc_html( get_field('sub_title') );

  if ( get_field('sub_title') ) {
    echo '<h1>'.$title.'</h1>';
    echo '<h2>'.$sub_title.'</h2>';
  }

  else {
    echo '<h1 class="nm">'.$title.'</h1>';
  }

?>

代替此行:

<?php

  if ( get_field('sub_title') ) {
    echo '<h1>'.$title.'</h1>';
    echo '<h2>'.$sub_title.'</h2>';
  }

?>

我想使用:

<?php

  if ( $sub_title ) {
    echo '<h1>'.$title.'</h1>';
    echo '<h2>'.$sub_title.'</h2>';
  }

?>

由于$sub_title变量具有转义的值,可以在if语句中使用吗?

1 个答案:

答案 0 :(得分:1)

作为一般原则,请尽量避免使用转义数据,除非您实际需要转义。例如,在获得将其实际添加到HTML的代码之前,不要添加HTML转义。所以我将其写为:

<?php

  $title = esc_html( get_the_title() );
  $sub_title = get_field('sub_title');

  if ( $sub_title ) {
    echo '<h1>'.$title.'</h1>';
    echo '<h2>'.esc_html($sub_title).'</h2>';
  }

  else {
    echo '<h1 class="nm">'.$title.'</h1>';
  }

?>

在某些情况下,就像您的代码中一样,可能没有关系。您的if语句只关心字符串是否为空,转义空字符串不会为其添加任何内容,因此if的结果将是相同的。

但是在更复杂的情况下,您可能会将该字符串与另一个字符串进行比较,并且根据所比较的内容,它可能会改变结果。

在数据库中存储数据时,类似的建议也适用。存储原始数据,然后不要转义。当您将其显示在HTML页面上时,请对其进行转义。这样,当您执行不涉及以HTML显示结果的查询(例如,创建CSV文件,以纯文本显示等)时,您就不必与可能已添加的转义进行竞争。 / p>