未返回我的 PHP 变量(wordpress 简码)中的引号
Quotes inside of my PHP variable (wordpress shortcode) aren't returned
我在这上面花了好几个小时,但我似乎找不到解决问题的方法,所以我认为从外面看会有帮助。
我编写了一个 WordPress 短代码,以更好地管理我的投资组合中的延迟加载图片。我正在使用占位符 URL-encoded SVG 来防止内容回流。
svg 存储在变量中并包含引号。 SVG 与其余的短代码一起返回。但是,不会返回 SVG 的 xmlns 元素周围的引号。
这是我的代码:
function img_shortcode( $atts , $content = null ) {
// Attributes
$atts = shortcode_atts(
array(
'caption' => 'no',
'src' => '',
'name' => 'media',
'captionclass' => 'caption',
'width' => '0',
'height' => '0',
),
$atts,
'img'
);
$urlsvg = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ". $atts['width'] ." ". $atts['height'] ."'%3E%3C/svg%3E";
if($atts['caption'] == 'yes')
{
return '<figure class="container"><img class="lozad" src="' . $urlsvg . '" data-src="' . $atts['src'] . '" alt="' . $atts['name'] . '" /><figcaption class="' . $atts['captionclass'] . '">'.$content.'</figcaption></figure>';
}
else{
return '<img class="lozad" src="' . $urlsvg . '" data-src="' . $atts['src'] . '" alt="' . $atts['name'] . '" />';
}
}
add_shortcode( 'img', 'img_shortcode' );
这是返回的内容:
<figure class="container"><img class="lozad" src="data:image/svg+xml,%3Csvg xmlns=http://www.w3.org/2000/svg viewBox='0 0 1300 1248'%3E%3C/svg%3E" data-src="linktotheimage" alt="alttextofimg"><figcaption class="caption">Caption text.</figcaption></figure>
我绝不是 php 专家,事实上,我确信我遗漏了对其他人来说最明显的东西,但我似乎无法看到它是什么这样可以防止我的报价被退回。
我试过用双引号替换单引号,结果是一样的。
谢谢,
尝试在引号周围使用反斜杠:
而不是
$urlsvg = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ". $atts['width'] ." ". $atts['height'] ."'%3E%3C/svg%3E";
尝试
$urlsvg = "data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox='0 0 ". $atts['width'] ." ". $atts['height'] ."'%3E%3C/svg%3E";
反斜杠应该可以避免任何 - 问题。
不确定为什么 xmlns='..'
的字符串中没有返回单引号,但 viewBox='..'
的字符串中返回单引号。您的代码似乎没问题。
您可以尝试一种叫做 escaping 的方法,您可以在其中使用反斜杠 (\
) 来删除字符具有的任何特殊含义。因此,例如,在您的代码中,您可以编写
$urlsvg = "data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ". $atts['width'] ." ". $atts['height'] ."\"%3E%3C/svg%3E";
仅使用双引号。
编辑: 导致此问题的原因是所谓的 'HTML Minifier',它删除了 "
或 '
字符。
我在这上面花了好几个小时,但我似乎找不到解决问题的方法,所以我认为从外面看会有帮助。
我编写了一个 WordPress 短代码,以更好地管理我的投资组合中的延迟加载图片。我正在使用占位符 URL-encoded SVG 来防止内容回流。
svg 存储在变量中并包含引号。 SVG 与其余的短代码一起返回。但是,不会返回 SVG 的 xmlns 元素周围的引号。
这是我的代码:
function img_shortcode( $atts , $content = null ) {
// Attributes
$atts = shortcode_atts(
array(
'caption' => 'no',
'src' => '',
'name' => 'media',
'captionclass' => 'caption',
'width' => '0',
'height' => '0',
),
$atts,
'img'
);
$urlsvg = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ". $atts['width'] ." ". $atts['height'] ."'%3E%3C/svg%3E";
if($atts['caption'] == 'yes')
{
return '<figure class="container"><img class="lozad" src="' . $urlsvg . '" data-src="' . $atts['src'] . '" alt="' . $atts['name'] . '" /><figcaption class="' . $atts['captionclass'] . '">'.$content.'</figcaption></figure>';
}
else{
return '<img class="lozad" src="' . $urlsvg . '" data-src="' . $atts['src'] . '" alt="' . $atts['name'] . '" />';
}
}
add_shortcode( 'img', 'img_shortcode' );
这是返回的内容:
<figure class="container"><img class="lozad" src="data:image/svg+xml,%3Csvg xmlns=http://www.w3.org/2000/svg viewBox='0 0 1300 1248'%3E%3C/svg%3E" data-src="linktotheimage" alt="alttextofimg"><figcaption class="caption">Caption text.</figcaption></figure>
我绝不是 php 专家,事实上,我确信我遗漏了对其他人来说最明显的东西,但我似乎无法看到它是什么这样可以防止我的报价被退回。
我试过用双引号替换单引号,结果是一样的。
谢谢,
尝试在引号周围使用反斜杠: 而不是
$urlsvg = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ". $atts['width'] ." ". $atts['height'] ."'%3E%3C/svg%3E";
尝试
$urlsvg = "data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox='0 0 ". $atts['width'] ." ". $atts['height'] ."'%3E%3C/svg%3E";
反斜杠应该可以避免任何 - 问题。
不确定为什么 xmlns='..'
的字符串中没有返回单引号,但 viewBox='..'
的字符串中返回单引号。您的代码似乎没问题。
您可以尝试一种叫做 escaping 的方法,您可以在其中使用反斜杠 (\
) 来删除字符具有的任何特殊含义。因此,例如,在您的代码中,您可以编写
$urlsvg = "data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ". $atts['width'] ." ". $atts['height'] ."\"%3E%3C/svg%3E";
仅使用双引号。
编辑: 导致此问题的原因是所谓的 'HTML Minifier',它删除了 "
或 '
字符。