【问题标题】:Quotes inside of my PHP variable (wordpress shortcode) aren't returned不返回我的 PHP 变量(wordpress 短代码)中的引号
【发布时间】:2020-01-29 04:54:31
【问题描述】:

我已经为此花费了数小时,但我似乎无法找到解决问题的方法,所以我认为从外部看确实会有所帮助。

我编写了一个 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 专家,事实上我确信我遗漏了一些对其他人来说最明显的东西,但我似乎无法看到是什么阻止了我的引用回来。

我试过用双引号代替单引号,结果是一样的。

谢谢,

【问题讨论】:

  • 期望返回的代码是什么?我不清楚。
  • 我希望 xmlns 值包含在引号中,如下所示:xmlns='http://www.w3.org/2000/svg'

标签: php wordpress svg shortcode


【解决方案1】:

不确定为什么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”,它删除了"' 字符。

【讨论】:

  • 谢谢。不幸的是结果是一样的,没有返回 xmlns 的值双引号。 :(
  • 也许启用了一些缩小器?见wordpress.org/support/topic/…。这就是我能想到的。
  • 谢谢,缩小器确实导致了这个问题!谢谢! :)
【解决方案2】:

尝试在引号周围使用反斜杠: 而不是

$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";

反斜杠应该有望避免任何问题。

【讨论】:

  • 谢谢。我之前实际上已经尝试过,这就是代码返回的内容:&lt;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="imglink" alt="KeyArtHA"&gt;
猜你喜欢
  • 2014-08-27
  • 1970-01-01
  • 2013-11-24
  • 2013-10-30
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多