将[image:123:title:size]等内嵌图像标记转换为HTML img标记

时间:2013-10-19 21:49:16

标签: php html arrays image preg-match-all

我正在寻找有关正则表达式$ pattern的帮助,以将[image:123:title:size]等内嵌图像标记转换为HTML img标记。

这是代码:

//[image:ID:caption:size]
$content = '[image:38:title:800x900]';

preg_match_all( '/\[image:(\d+)(:?)([^\]]*)\]/i', $content, $images );

        if( !empty( $images[0] ) )
        {   // There are image inline tags in the content
            foreach( $images[0] as $i => $tag )
            {

            $link_ID = (int)$images[1][$i];
            $caption = empty( $images[2][$i] ) ? '#' : $images[3][$i];
            $size = empty( $images[4][$i] ) ? '#' : $images[5][$i];

            }
            echo '<br />';
            echo 'ID: '.$link_ID.'<br />';
            echo 'Tag: '.$caption.'<br />';
            echo 'size: '.$size.'<br />';
        }

输出:

图片ID:12

标题:标题:大小

尺寸:#

但应该输出:

图片ID:12

标题:标题

尺寸:尺寸

此---&GT; / [图像:(\ d +)(?:)([^]] *)] / I

不起作用

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:0)

这是你要找的东西吗?我假设你正在进行内联解析,所以preg_replace可能会做得更好。我不确定你要做什么的具体细节。

<?php

$content = 'Check out my awesome [image:38:title:800x900], but not as good as my other [image:20:thumbnail:200x200]';

$parsed_content = preg_replace( '/\[image:(\d+):([^\:]+):(\d+)x(\d+)\]/i', '<img src=\'$1.jpg\' alt=\'$2\' width=$3 height=$4>', $content);

echo "Before: {$content}\n";
echo "After: {$parsed_content}\n";

输出:

  

之前:看看我真棒[image:38:title:800x900],但不是那么好   作为我的其他[image:20:thumbnail:200x200]

     

之后:看看我真棒   <img src='38.jpg' alt='title' width=800 height=900>,但不是那么好   作为我的其他<img src='20.jpg' alt='thumbnail' width=200 height=200>

编辑:

<?php
$content = '[image:38:title:800x900]';

preg_match_all( '/\[image:(?<id>\d+):(?<caption>[^:]+):(?<size>[\dx]+)/i', $content, $images );

        if( !empty( $images[0] ) )
        {   // There are image inline tags in the content
            foreach( $images[0] as $i => $tag )
            {

            $link_ID = (int)$images['id'][$i];
            $caption = empty( $images['caption'][$i] ) ? '#' : $images['caption'][$i];
            $size = empty( $images['size'][$i] ) ? '#' : $images['size'][$i];

            }
            echo '<br />' . "\n";
            echo 'ID: '.$link_ID.'<br />' . "\n";
            echo 'Tag: '.$caption.'<br />' . "\n";
            echo 'size: '.$size.'<br />' . "\n";
        }

答案 1 :(得分:0)

解决!

$content = '[image:12:caption:size]';
preg_match_all( '/\[image:(\d+)(:?)(.*)(:)([^\]]*)\]/i', $content, $images );

        if( !empty( $images[0] ) )
        {   // There are image inline tags in the content
            foreach( $images[0] as $i => $tag )
            {

                $link_ID = (int)$images[1][$i];
                $caption = empty( $images[2][$i] ) ? '#' : $images[3][$i];
                $size = empty( $images[4][$i] ) ? '#' : $images[5][$i];
                print_r($images);
            }
            echo '<br />';
            echo 'ID: '.$link_ID.'<br />';
            echo 'Title: '.$caption.'<br />';
            echo 'Dimensions: '.$size.'<br />';
        }

已取代:

/\[image:(\d+)(:?)([^\]]*)\]/i

<强>与

/\[image:(\d+)(:?)(.*)(:)([^\]]*)\]/i

谢谢!