插入db

时间:2016-01-06 23:41:34

标签: php html regex string

我有一个博客系统,用户在帖子内容中输入图片网址,如

hey how are you <img src="example.com/image.png" style="width: 952px;"> 

如果用户写得像这样

hello how are you <img src="example.com/image.png" style="width: 952px;">

然后我想找到这个style width 952px行并将其替换为100%

用户可以输入任何尺寸的图像,如100px 300px 这是我尝试过的:

$ content是用户发布的内容

  $go = $content;
  $mystr= $go;
  $start=strpos($mystr,'style="width: ');
  $end=strpos($mystr,'">');
  $jo = substr($mystr,0,$start+strlen('') ) . 'style="width: 100%;' . 
  substr($mystr,$end);

我面临的问题是,如果用户放置两个或三个图像标签,但此脚本仅替换一个宽度值,如何替换多个宽度

用户输入 - &gt;

  <img src="example.com/img.png" style="width: 500px;"><br><img 
  src="example.com/img2.png" style="width: 952px;">

这是我得到的结果

  <img src="example.com/img.png" style="width: 100%;"><br><img 
  src="example.com/img2.png" style="width: 952px;">

第二张图片没有改变宽度值

3 个答案:

答案 0 :(得分:0)

此案例非常适合正则表达式搜索和替换。 在PHP中,您可以使用 preg_replace ,您可以在此处找到文档:   - http://php.net/manual/en/function.preg-replace.php

答案 1 :(得分:0)

使用preg_replace功能:

$go = preg_replace('/style="width:\s*\d+px;/i', 'style="width:100%;', $content);

假设$ content只包含您的<img>标记,否则您可能会搞乱其他html元素。

答案 2 :(得分:0)

只需使用带preg_replace()的正则表达式替换每个img标记中的宽度,例如

echo preg_replace("/<img.*?\Kwidth:\s*[^;]*/s", "width:100%", $input);

我们首先匹配所有内容,直到img标记(<img.*?)中的width属性,然后将匹配项重置为\K,以便我们可以匹配width属性(width:\s*[^;]*/)并将其替换为width:100%