php 中的 Base64 图像 preg_replace

Base64 image preg_replace in php

您好,我在用简单的英镑字符“#”替换 base64 嵌入图像时遇到问题,我必须替换的字符串是

src=\"data:image/png;base64,Y6BkQWnG0Ywf4AiyACMYD4IAfhggAIuAD4wnHwaRNjXOOEHJsjAVnAwDlKhDFNUiCLoRCD2KZW45098i8a+miGXtKPkBdXQO4qZ9096Pmh1v3dytrxhsrR2tlzue1uJShr8JY0BSSMpasCL6/DiOr9YEZK1BKRKslSJyZToASVSpoTKlL5yJVKmDEgVVImCljY+tkxJy5RUaSMweEjLlJSMowmn51vryY2NVHI9uZFMpX765Wd/MGC19TF1E5t9wGpzmMx2g9Fq7xscHZsCOQ7pD2I4CcEooElGkLKVJhkBCE742fcBR5ikJiMwYVBC0WE6FAEOUqFAkA4EqDAZjuKhMOyPw4FPyeg3weXvsOhXTv+9MS95vbe/osVUVjX8TsP8kdNz7ypnpCf8JY1hsTIkaqQEDQG+PMCXUyIFVaIMlijJUiVRupUmyl9JE5qjCafnXOvJjbWNdRChfP/jD17I1+8YtNn7LVa7xWq32hwWa7/RZDOZ7YNDY7NzLlDvwHASQXFAExjBUIzYFiVbIcL4aShhghRwh2EKyGsASig6zNAkRISiRDhCUDQRjARCiVBsiY4s+ullmLiHB79y4zHj0EzLh7Z36x1v1y282+/gDFBCzgp0SQwoJBhAqikRAajyDxiC9OQzEKiviJSDAcppfo0J1g6AsieA8PfoUGv8HD97z+1XEXqXPMXegYrmtzfNAyeKhx5lCL82ALciANlDRNRC2YrMlXroQONsHlaWfQBHCEKGsmyjiacHq+lUylNlJJ0NOJxKL2/j4QmxiMZqutz2zp0xssjoERrw/1B0IYHsigBlN/zeBIRk3k1xvDSdDZYWIQhiYMUBiTFI3QFByikDCNhGk0EkIjISxK41E6EI/Q0UgoFIpQdDxALwap1QC9HKRXwrElOrJCRT6j4/f8sTuzCK5xzJ7rGK1qGz/cOnmweb60CZad9MtaaWlrUHoSL2+Bypo8pQqfVAGVNiIHmrCyZvxAc+Ct08HyU6SsmShR+kuUwdLmUNkpji4VCz6+1m78Fm6GAzzPV0OD3nYsbqV26vDo0MW2xWEJtYrPa+/oHJqTkEJQPBMNjHJIMm246lZUy1ZkQZjHconWT0g3egSSBI44EgHkhji6Rokko/f+v4bCgUCYUi8VAsSkUiwXAkFI3FEvHEUiSxGI4vLy0urSytLK+s3L6zent1+fad5ZW7S7fvLq18tnj786XVLxbvcDTh9FxrfSOVTKV+/OmX6Zm5waERs8WmN5j6+gcmp2bcHh8gBbOHAHvjkqd1gv9gmpBkIL2REghVNg0e0nSY3qQJTYfD4Wgk8gRNIpFYNBqPRuOgIht/kibx+GIslkgklhYXl5eWVpaWVpaXV1dWbt++fXdl5Tbbq6t3Vlc5mnB6vrWRTG0kU998+/34xBSYgjWaLP2OQafLg6A4aL4AlICx123bN+yyK0cTTpyeUyVTqfWN1Jf3vhoeGXMMDIHlOf2OQa8Pxgk/aL4wy3AATbbt3XA0WV298/8BwcTdoNx7r2kAAAAASUVORK5CYII=\" alt=\"\"

代码是

$pattern = '~data\:image\\/[a-zA-Z]*\;base64\,[a-zA-Z0-9\+\/\\=]*\=~';
$replacement = '#';
$count = 0;
$rep = preg_replace($pattern, $replacement, $data, -1, $count);

但没有任何反应 - 替换计数为 0;

在 gskinner 的在线正则表达式中 http://regexr.com 一切正常。

我使用“~”是因为 PHP 在我使用“/”时发出警告。

有什么帮助吗? 谢谢!

你这样的反斜杠太多了。例如。 \\/ 表示 a backslash + an escaped forward slash

这适用于 ~ 分隔符:

$re = "~data:image/[a-zA-Z]*;base64,[a-zA-Z0-9+/\=]*=~"; 
$str = "src=\\"data:image/png;base64,Y6BkQWnG0Ywf4AiyACMYD4IAfhggAIuAD4wnHwaRNjXOOEHJsjAVnAwDlKhDFNUiCLoRCD2KZW45098i8a+miGXtKPkBdXQO4qZ9096Pmh1v3dytrxhsrR2tlzue1uJShr8JY0BSSMpasCL6/DiOr9YEZK1BKRKslSJyZToASVSpoTKlL5yJVKmDEgVVImCljY+tkxJy5RUaSMweEjLlJSMowmn51vryY2NVHI9uZFMpX765Wd/MGC19TF1E5t9wGpzmMx2g9Fq7xscHZsCOQ7pD2I4CcEooElGkLKVJhkBCE742fcBR5ikJiMwYVBC0WE6FAEOUqFAkA4EqDAZjuKhMOyPw4FPyeg3weXvsOhXTv+9MS95vbe/osVUVjX8TsP8kdNz7ypnpCf8JY1hsTIkaqQEDQG+PMCXUyIFVaIMlijJUiVRupUmyl9JE5qjCafnXOvJjbWNdRChfP/jD17I1+8YtNn7LVa7xWq32hwWa7/RZDOZ7YNDY7NzLlDvwHASQXFAExjBUIzYFiVbIcL4aShhghRwh2EKyGsASig6zNAkRISiRDhCUDQRjARCiVBsiY4s+ullmLiHB79y4zHj0EzLh7Z36x1v1y282+/gDFBCzgp0SQwoJBhAqikRAajyDxiC9OQzEKiviJSDAcppfo0J1g6AsieA8PfoUGv8HD97z+1XEXqXPMXegYrmtzfNAyeKhx5lCL82ALciANlDRNRC2YrMlXroQONsHlaWfQBHCEKGsmyjiacHq+lUylNlJJ0NOJxKL2/j4QmxiMZqutz2zp0xssjoERrw/1B0IYHsigBlN/zeBIRk3k1xvDSdDZYWIQhiYMUBiTFI3QFByikDCNhGk0EkIjISxK41E6EI/Q0UgoFIpQdDxALwap1QC9HKRXwrElOrJCRT6j4/f8sTuzCK5xzJ7rGK1qGz/cOnmweb60CZad9MtaaWlrUHoSL2+Bypo8pQqfVAGVNiIHmrCyZvxAc+Ct08HyU6SsmShR+kuUwdLmUNkpji4VCz6+1m78Fm6GAzzPV0OD3nYsbqV26vDo0MW2xWEJtYrPa+/oHJqTkEJQPBMNjHJIMm246lZUy1ZkQZjHconWT0g3egSSBI44EgHkhji6Rokko/f+v4bCgUCYUi8VAsSkUiwXAkFI3FEvHEUiSxGI4vLy0urSytLK+s3L6zent1+fad5ZW7S7fvLq18tnj786XVLxbvcDTh9FxrfSOVTKV+/OmX6Zm5waERs8WmN5j6+gcmp2bcHh8gBbOHAHvjkqd1gv9gmpBkIL2REghVNg0e0nSY3qQJTYfD4Wgk8gRNIpFYNBqPRuOgIht/kibx+GIslkgklhYXl5eWVpaWVpaXV1dWbt++fXdl5Tbbq6t3Vlc5mnB6vrWRTG0kU998+/34xBSYgjWaLP2OQafLg6A4aL4AlICx123bN+yyK0cTTpyeUyVTqfWN1Jf3vhoeGXMMDIHlOf2OQa8Pxgk/aL4wy3AATbbt3XA0WV298/8BwcTdoNx7r2kAAAAASUVORK5CYII=\\" alt=\\"\\""; 
$subst = "#"; 
echo preg_replace($re, $subst, $str);

sample program的结果:

src=\"#\" alt=\"\"