富文本粘贴剪切板图片时,图片网址变成data:开头的乱码
- 代码编程
- 3天前
- 18热度
- 0评论
在粘贴剪切板图片时,也正常但是发布博文后,查看图片网址,变成一大串乱码,以data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAC0CAYAAACeyaKxAAAYhWlDQ1BJQ0MgUHJvZmlsZQAAWIWVeQdYFEuzds9sXlhyzjlKziCSc85BVJacwSWjIgIiQQUkiAKiwEEQBSNJBCQYEEkKKCqioICiYiAJyB2CnvOd73/++9zep2fera6uqq4ONTUDAOdLclhYEEwHQHBIBMXWSJfP2cWVDzcDIMCK/AAQInuGh+lYW5sjGPy+/2dZGEa4kfJEakPWf7f/fwuDl3e4JwCQG4I9vMI9gxHcBg 开头,这是怎么回事? 是剪切板的图片没有上传吗? 但是blogger的这种 方式都能上传剪切板图片。
这个问题是因为图片以 Base64 格式直接嵌入到文章内容中,而不是作为文件上传到 WordPress 媒体库。这种方式虽然可以显示图片,但会导致:
1. 数据库负担加重
2. 页面加载变慢
3. 不利于 SEO
4. URL 显示为 base64 编码
解决方案是安装一个处理剪贴板图片的插件,或者添加以下代码到你的主题的 functions.php:
```php
function auto_upload_base64_images($content) {
if (preg_match_all('/src="data:image\/([^"]+)"/', $content, $matches)) {
foreach ($matches[0] as $index => $match) {
preg_match('/data:image\/([^;]+);base64,([^"]+)/', $match, $base64_matches);
if (count($base64_matches) === 3) {
$extension = $base64_matches[1];
$base64_string = $base64_matches[2];
$upload_dir = wp_upload_dir();
$filename = 'clipboard-' . time() . '-' . $index . '.' . $extension;
$upload_path = $upload_dir['path'] . '/' . $filename;
$upload_url = $upload_dir['url'] . '/' . $filename;
file_put_contents($upload_path, base64_decode($base64_string));
$content = str_replace($match, 'src="' . $upload_url . '"', $content);
}
}
}
return $content;
}
add_filter('content_save_pre', 'auto_upload_base64_images');
```
```
这段代码会:
1. 检测文章内容中的 base64 图片
2. 将其转换为实际文件
3. 上传到媒体库
4. 替换原有的 base64 链接为实际图片 URL
添加代码后,当你粘贴剪贴板图片时,它会自动上传到媒体库而不是保存为 base64 格式。