2014-01-22 70 views
0

我有一個沒有任何意義的問題。 爲什麼我的html被錯誤地解析?簡單地改變它在PHP中分配的方式似乎解決了這個問題,它是一個PHP /瀏覽器的錯誤?PHP:雙引號鏈接更改報價

當我的短代碼看起來是這樣的:

[gallerybl圖像= 'http://dev.netcoding.net/aristocrat-v2/wp-content/uploads/2013/06/Mirage-Yellow-Birch-Montana11.jpg 'HREF = 「#」 標題=' 生存空間'] Epediti solore,solorep rectota IL吃receriandia塞克非PA ititissi solestenit omn​​imeture,SUS奏CORPORE rcimoll enissequi custiam。[/ gallerybl]

WordPress的(使用一切作爲默認,關機每濾除),調用以下功能和$image1被不正確地解析爲(請注意在第一報價a標籤):

<a href="#' title='Living Space'><span class='gallery_bl_img'><img src='http://dev.netcoding.net/aristocrat-v2/wp-content/uploads/2013/06/Mirage-Yellow-Birch-Montana11.jpg" alt='Living Space' /></span></a> 

這裏是被調用的函數:

function get_gallery_block($atts, $content = "") { 

    extract(shortcode_atts(array(
     'image' => '', 
     'href' => '', 
     'title' => '' 
    ), $atts)); 

    $image = "<span class='gallery_bl_img'><img src='{$image}' alt='{$title}' /></span>"; 
    $image1 = empty($href) ? $image : "<a href='{$href}' title='{$title}'>{$image}</a>"; 
    $image2 = empty($href) ? $image : '<a href="' . $href . '" title="' . $title . '">' . $image . "</a>"; 
    $htitle = empty($title) ? ""  : "<span class='gallery_bl_title'>{$title}</span>"; 
    $clink = empty($content) ? ""  : (empty($href) ? "" : "<a href='#' title='{$title}'>READ MORE</a>"); 
    $desc = empty($content) ? ""  : "<span class='gallery_bl_content'>{$content} {$clink}</span>"; 

    $format = ($htitle . $image1 . $desc); 
    return "<div class='gallery_bl_container'>{$format}</div>"; 

} 
add_shortcode('gallerybl', 'get_gallery_block'); 

瀏覽器:Google Chrome 32.0.1700.76 m,有沒有什麼幫助。

PHP版本:5.4.24(CGI/FastCGI的)

+1

什麼是更多的越野車:PHP,您的瀏覽器或wordpress? – 2014-01-22 03:21:56

+0

我有最新的所有3個版本,unmodofied。 (PHP可以從我的主機獲得最新版本) –

+0

在調用短代碼時可能是混合了引號嗎? Wordpress的短代碼解析器非常複雜,所以儘量不要混淆它。堅持使用與所有屬性相同的引號 – Phil

回答

0

整個事情需要清理(主要是爲了可讀性)。試試這個...

add_shortcode('gallerybl', function($atts, $content = null) { 
    extract(shortcode_atts(array(
     'image' => null, 
     'href' => null, 
     'title' => null 
    ), $atts)); 

    // escape all atts for HTML 
    $image = htmlspecialchars($image); 
    $title = htmlspecialchars($title); 
    $href = htmlspecialchars($href); 

    $imgMarkup = sprintf('<span class="gallery_bl_img"><img src="%s" alt="%s"></span>', 
     $image, $title); 
    if ($href) { 
     $imgMarkup = sprintf('<a href="%s" title="%s">%s</a>', 
      $href, $title, $imgMarkup); 
    } 

    ob_start(); 
    ?> 
    <div class="gallery_bl_container"> 
     <?php if ($title) : ?> 
      <span class="gallery_bl_title"><?= $title ?></span> 
     <?php endif ?> 
     <?= $imgMarkup ?> 
     <?php if ($content) : ?> 
      <span class="gallery_bl_content"> 
       <?= do_shortcode($content) ?> 
       <?php if ($href) : ?> 
        <a href="#" title="<?= $title ?>">READ MORE</a> 
       <?php endif ?> 
      </span> 
     <?php endif ?> 
    </div> 
    <?php 
    return ob_get_clean(); 
}); 
+0

這工作。你能解釋爲什麼在短代碼輸出中使用單引號?這是我在這裏遇到的主要問題。 –

+0

是的,你的代碼確實可行,但爲什麼我的破產?它看起來非常好。 –

+0

@BrianGraham好吧,除了有一個未使用的變量'($ image2)'並且覆蓋'$ image'屬性,你使用的是嵌套的三元語句,這幾乎不會影響你的想法。見http://php.net/manual/language.operators.comparison.php#example-124 – Phil