【问题标题】:replacing an img with a div str_replace用 div str_replace 替换 img
【发布时间】:2016-03-18 17:25:31
【问题描述】:

所以我已经尝试了几天来替换这个 img

<img src="$post[avatarurl]" $post[avwidth] $post[avheight] alt="<phrase 1="$post[username]">$vbphrase[xs_avatar]</phrase>" border="0" />

带有一个 div。

我终于得到了结果

$vbulletin->templatecache['postbit'] = str_replace('<img src=\"$post[avatarurl]\"', 'CRAP', $vbulletin->templatecache['postbit']);

它替换了 img 的开头和 src 标记。

但我似乎无法让它抓取 img 标签中的所有内容,我正在尝试做类似的事情

str_replace('<img src=\"$post[avatarurl]\".*/>', .......

但是当我添加最后一部分时 .*/> 它停止工作 =( 我做错了什么,我怎样才能让它抓住img标签中的所有东西=/

【问题讨论】:

    标签: php string replace forum vbulletin


    【解决方案1】:

    如果你要使用正则表达式 .*,那么你必须调用 preg_repalce 而不是 str_replace。

    如果你的字符串是这样的

    $string = '<img some stuff /><img src="$post[avatarurl]" $post[avwidth] $post[avheight] alt="<phrase 1="$post[username]">$vbphrase[xs_avatar]</phrase>" border="0" /><img some other stuff />';
    

    那么一个合适的正则表达式可能是这样的:

    $result = preg_replace('/<img src="\$post\[avatarurl\].*? \/>/', 'CRAP', $string);
    

    这里我保护了字符 $ [] 因为它们在正则表达式中有特殊的含义。 还要注意 ?在 .* 之后签名。永远记住,正则表达式是贪婪的,它们会不断地吞噬你的所有文件。

    【讨论】:

    • 很好解释,帮助我更清楚地理解,但由于某种原因,这仍然没有效果。 $search = "//"; $replace = "CRAP"; $vbulletin->templatecache['postbit'] = preg_replace($search,$replace,$vbulletin->templatecache['postbit']); 是我使用的代码
    • 如果我使用 /[^]/ 进行搜索,我会得到结果,但它们会重复结果 =/ 我认为可能有$post[avatarurl] 变量也有问题,我根本无法使用它
    • 在 $search 变量中,您应该使用单引号,而不是双引号: $search='$somestring' 而不是 $search="$somestring" ,$ 符号必须保留为字面量一,而不是一些名为 $somestring 的变量。
    猜你喜欢
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2016-09-27
    • 2016-01-11
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    相关资源
    最近更新 更多