Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_replace plus在src内部的开始和结束处追加以替换cid:_Php_Regex_Email Attachments - Fatal编程技术网

Php preg_replace plus在src内部的开始和结束处追加以替换cid:

Php preg_replace plus在src内部的开始和结束处追加以替换cid:,php,regex,email-attachments,Php,Regex,Email Attachments,我有一个HTML字符串。为此,假设字符串为: <img id="Picture_x0020_1" src="cid:image001.jpg@01D05CBF.CF7A44B0" alt="Variety 008 (893 x 799) (223 x 200)" height="200" width="223">dflkjdslkjdsfldskfjdlfkjdlfksdjfflkdsjfdlkdfdjflkdfjdlkjfkdlfjdljfldjfldjflkdjjfkd<i

我有一个HTML字符串。为此,假设字符串为:

<img id="Picture_x0020_1" src="cid:image001.jpg@01D05CBF.CF7A44B0" alt="Variety 008 (893 x 799) (223 x 200)" height="200" width="223">dflkjdslkjdsfldskfjdlfkjdlfksdjfflkdsjfdlkdfdjflkdfjdlkjfkdlfjdljfldjfldjflkdjjfkd<img id="Picture_x0020_1" src="cid:image001.jpg@01D05CBF.CF7A44B0" alt="Variety 008 (893 x 799) (223 x 200)" height="200" width="223">hkjhkhkhkhkhkjhjkhhkjhkjhkjhkjhjkhkjhkjhkhkjhkjhjkhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjh<img id="Picture_x0020_1" src="cid:image001.jpg@01D05CBF.CF7A44B0" alt="Variety 008 (893 x 799) (223 x 200)" height="200" width="223">dsjhfdsjfdjflsjflkjdflkjffldskjfdljdlfkjflkdjflkdjfdslkjfkds
因此,实际图像名称如下所示: 308907_image001。jpg@01D05CBF.CF7A44B0_image001.jpg

现在,我的目标是替换所有这些事件:

cid:image001。jpg@01D05CBF.CF7A44B0

附件/308907_image001。jpg@01D05CBF.CF7A44B0_image001.jpg

基本上去掉cid:string,将$mail_id和u附加到字符串的开头,并将_image001.jpg附加到末尾

请记住,我可能会在html字符串中嵌入一堆这样的cid src

所以对正则表达式不是很好,我只是在小步做,首先我想知道如何替换cid:image001。jpg@01D05CBF.CF7A44B0附附件/308907_image001。jpg@01D05CBF.CF7A44B0然后我会尝试找出如何在末尾附加_image001.jpg

我设法构建了一个正则表达式来突出显示整个图像标记,并在其中运行它,从而突出显示元素[1]中的cid:值:

我在想这样的事情,但它只是返回一个空字符串,但逻辑似乎在regex工具中起作用,所以我不明白为什么它不起作用,可能是因为regex有3个元素,我需要访问元素[1]来获取cid:值,不确定:

$string = preg_replace('/(<img\b\s+.*?src=\")(.*?cid:.*?)(\">)/g', 'attachments/'.$mail_id.'_', $html);
但是,因为电子邮件中可能有很多这样的内容,我认为这种方法行不通,而且从性能角度来看,它可能不太好,因为有些电子邮件在某些情况下可能会很大

我担心的是,由于在解析过程中可能会有一封很大的电子邮件,所以在调用preg_replace函数的同时,可能有一种方法可以做到这一点

如果有人给我指出了正确的方向,并给了我一些实现这一目标的最佳方法的提示,我很乐意找出实际的代码。

试试这个

$re = "/src=\\\"cid:(.*?)@(.*?)\\\"/s"; 
$str = "<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">dflkjdslkjdsfldskfjdlfkjdlfksdjfflkdsjfdlkdfdjflkdfjdlkjfkdlfjdljfldjfldjflkdjjfkd<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">hkjhkhkhkhkhkjhjkhhkjhkjhkjhkjhjkhkjhkjhkhkjhkjhjkhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjh<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">dsjhfdsjfdjflsjflkjdflkjffldskjfdljdlfkjflkdjflkdjfdslkjfkds"; 
$subst = "src=\"attachments/".$mailid."_$1@$2_$1\""; 

$result = preg_replace($re, $subst, $str);
$re=“/src=\\\”cid:(.*?@(.*?\\\”/s”;
$str=“DFLKJDSLKJDSFLDSKFJDLFKJDFKJFFLKJFDLKDFDJFLKDFJDFLJFLDJFLKDJFKDLJFLDJFLJFKDKJHKKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJHKJKJKJKJJJJKJJJJJKJKJJJJJJKJJ;
$subst=“src=\”附件/“$mailid。”\u$1@$2\u$1\”;
$result=preg_replace($re,$subst,$str);

更新:

模式=
/src=\“cid:(.*?)@(.*?\”/s

src
=匹配字符
src

\”
=匹配字符
字面意思
cid
:=匹配字符
cid:

现在,我们必须从字符串中捕获图像名称,这样我们就可以将其追加并前置到输出字符串中。图像名称可以在
cid:
@
之间捕获

因此,
cid:(.*)@
将捕获图像名称。这是模式中的第一个捕获组。(即,
$1
)。图像名称将存储在
$1
中,因为它是第一个捕获的组)。如果使用
preg\u match
,则它将是
$match[1]

然后我们需要介于
@
之间的字符串“
这是第二个捕获组。因此
@(.*?)
替换前被称为
$2
” 功能


preg\u replace
中,匹配的字符串将存储到
$0
$1
中,依此类推。在
preg_match
中,匹配的字符串将存储到
$match[0]
$match[1]
中,依此类推。。
$match
是用户定义的数组名,它将被解析为函数中的第三个参数

Perfect,除了在$mailid上缺少连接外,效果非常好。应该是这样的:$subst=“src=\”附件/“$mailid。”\u$1@$2\u$1\”;请更新,我接受答案并投票。感谢您的帮助也为了我和其他人的利益,您能解释一下$subst行是怎么回事吗。我理解这是怎么回事,因为它构建了src字符串的开头,前面有附件/$mailid_uu,然后是$1@$2,我假设它会回显image001。jpg@01D05CBF.CF7A44B0部分,最后,$1呼应出image001.jpg我不明白的是你从哪里构建了那些$1,$2变量,它是从$re正则表达式的元素中提取出来的,还是与substr函数相关联的人?更新了我的答案,但如果您有任何疑问,请告诉我
$current_image_name = 'attachments/308907_image001.jpg@01D05CBF.CF7A44B0';
$new_image_name = 'attachments/308907_image001.jpg@01D05CBF.CF7A44B0_image001.jpg';

str_replace($current_image_name, $new_image_name,$html);
$re = "/src=\\\"cid:(.*?)@(.*?)\\\"/s"; 
$str = "<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">dflkjdslkjdsfldskfjdlfkjdlfksdjfflkdsjfdlkdfdjflkdfjdlkjfkdlfjdljfldjfldjflkdjjfkd<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">hkjhkhkhkhkhkjhjkhhkjhkjhkjhkjhjkhkjhkjhkhkjhkjhjkhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjhkjh<img id=\"Picture_x0020_1\" src=\"cid:image001.jpg@01D05CBF.CF7A44B0\" alt=\"Variety 008 (893 x 799) (223 x 200)\" height=\"200\" width=\"223\">dsjhfdsjfdjflsjflkjdflkjffldskjfdljdlfkjflkdjflkdjfdslkjfkds"; 
$subst = "src=\"attachments/".$mailid."_$1@$2_$1\""; 

$result = preg_replace($re, $subst, $str);