【问题标题】:Base64 image preg_replace in phpphp中的Base64图像preg_replace
【发布时间】:2015-05-05 20:31:49
【问题描述】:

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

SRC = \\“数据:图像/ 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 会发出警告。

对此有什么帮助吗? 谢谢!

【问题讨论】:

    标签: regex image base64 preg-replace


    【解决方案1】:

    这样你的反斜杠太多了。例如。 \\\/ 表示 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=\"\"
    

    【讨论】:

    • 真的好用!起初我认为每个 base64 编码都以“=”符号结尾 - 似乎不是,必须从正则表达式中删除一个,现在看起来像这样 ~data:image/[a-zA-Z]*;base64,[a-zA-Z0-9+/=]*~。感谢您的快速回复。
    • 不客气。是的,Base64 的不同实现可以以不同的字符结尾。如果答案对您有用,也请考虑投票。
    猜你喜欢
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多