gutaker
gutaker

Reputation: 181

Base64 image preg_replace in php

Hi i'm facing problem with replacing base64 embedded image with simple pound chracter "#" and the string i have to replace is

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=\\"\\"

and the code is

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

but nothing happens - the replacement count is 0;

In gskinner's regexp online http://regexr.com everything looks ok.

I use "~" beacuse PHP is yelling warninigs when i use "/".

Any help on that? Thanks!

Upvotes: 1

Views: 3432

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626923

You have too many backslashes that way. E.g. \\\/ means a backslash + an escaped forward slash.

This works alright with the ~ delimiter:

$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);

Result of the sample program:

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

Upvotes: 2

Related Questions