用图像替换字符串

时间:2012-04-03 23:24:44

标签: php xml wordpress

我正在寻找一种用图像替换某些字符串的方法。所有字符串都包含在{}中,当代码看到[}内部将被读取的内容时,它的内容将成为特定的图像。我不是最模糊的如何实现这一点,并希望有人能给我一个例子。

以下是我更好解释的例子:

{1} is replaced with an image

因此,当代码看到{}时,它将被激活。现在它不会干扰代码的其他部分,它只限于1个字符,只限于某些字符。这对于魔术卡铸造成本更加具体。所以它也会受到限制.....

例如,

B,U,R,G,W,X,T,1-99

===============================

所以.....这样的事情?

$image_string = '{R}{R}{R}{3}

$Mana_symbol ='BURGWXT1-99';

$output = preg_replace_all('/\{([' . $Mana_symbol. '])\}/', '<img src="\1.png"/>', $string);

switch ($output)
{
    case ('B'):
        $mana = '<img src = "black_mana.png"/>';
        break;
    case ('U'):
        $mana = '<img src = "blue_mana.png"/>';
        break;
    case ('G'):
        $mana = '<img src = "green_mana.png"/>';
        break;
    case ('R'):
        $mana = '<img src = "red_mana.png"/>';
        break;
    case ('W'):
        $mana = '<img src = "white_mana.png"/>';
        break;
    case ('1'):
        $mana = '<img src = "1_colorless_mana.png"/>';
        break;
    case ('2'):
        $mana = '<img src = "2_colorless_mana.png"/>';
        break;
    case ('3'):
        $mana = '<img src = "3_colorless_mana.png"/>';
        break;

        ....etc....

我不应该使用preg_replace_all,因为会有一些有多个这样的实例吗?就像上面的$ image_string一样,它将替换匹配的字符串中的所有出现?

2 个答案:

答案 0 :(得分:3)

以下是使用正则表达式的示例(请参阅http://www.php.net/pcre):

假设您的图片被x.png标记为{x}

<?php

$string = '{1} is replaced with an image';

// Use a regular expression
// The codes below will be placed into a character class
$validCodes = 'BURGWXT0-9';

// This array contains the image transforms
$images = array(
    'B' => 'black_mana.png',
    'U' => 'blue_mana.png',
    // ...
);

// Use preg replace to insert the images
$string = preg_replace_callback(
    '/\{([' . $validCodes . ']+)\}/',
    function($m) use ($images) {
        if (isset($images[$m[1]])) {
            return '<img src="' . $images[$m[1]] . '"/>';
        }
        return '';
    },
    $string
);

echo $string;

?>

请询问您是否需要进一步澄清。

修改

我添加了一种机制,您可以通过填充数组来添加自己的变换。

preg_replacepreg_replace_callback都会替换他们在字符串中找到的所有事件。

请注意,我使用的匿名函数仅适用于PHP 5.3.0+(http://php.net/manual/en/functions.anonymous.php)。

修改2

我刚刚意识到正则表达式的字符类不能捕获所有字符,并且你需要在字符类之后使用+来捕获你的一些代码。

答案 1 :(得分:1)

Youu可以使用正则表达式解析所有{},然后str_replace它们

preg_match_all('/{(1|2|3|99|a)}/', "{1} is replaced with an image{a} {99}", $match)