我有以下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语句中使用吗?
答案 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>