我在 WordPress 博客上使用的一些图片出现了问题。迁移后,我重命名了每张图片,用下划线替换了空格,因此
HIDDEN_264_4062_FOTO_IDF 洛杉矶 MID.jpg
更名为
HIDDEN_264_4062_FOTO_IDF_los_MID.jpg
但是,尽管这个技巧是必要的,并且对大多数帖子都有效,但其中一些帖子试图找到带有空格的旧图像:
未找到
http://www.example.com/files/HIDDEN_264_4062_FOTO_IDF%20los%20MID.jpg
这应该是正确的 URL
http://www.example.com/files/HIDDEN_264_4062_FOTO_IDF_los_MID.jpg
但要小心,因为“%20”仅显示在浏览器上:数据库上的文本显示空格,而不是“%20”。
我想知道我是否可以在 WordPress MySQL 数据库中进行 SQL 查询,将 .jpg 文件中的空格替换为下划线。图像的路径始终相同,因此规则应该转换这一点:
/文件/HIDDEN_264_4062_FOTO_IDF 洛杉矶 MID.jpg
/文件/HIDDEN_264_4062_FOTO_IDF_los_MID.jpg
“/files/HIDDEN_264_”部分始终相同,但其余部分各不相同。有什么方法可以做到这一点?也许是 Apache(我们当前的 Web 服务器)上的重写规则?
答案1
您可以使用 mysqlreplace
函数,例如:
mysql> UPDATE your_table SET your_field = REPLACE(your_field, ' ', '_') WHERE your_field like '/files/HIDDEN_264_%';
这将用下划线替换字段中保存的文件名中的所有空格your_field
。
为了替换字符串部分的空格,可以使用substring
函数:
mysql> UPDATE your_table SET your_field = concat(REPLACE(substring(your_field from 1 for 30), ' ', '_'), substring(your_field from 31) WHERE your_field like '/files/HIDDEN_264_%';
上述示例仅替换 中的前 30 个字符中的空格your_field
。您可以根据拥有的数据类型进行自定义。如果您无法确定正确的长度(本例中为 30),则可以使用locate
函数搜索特定模式(分隔符)。
由于我不知道您的数据的格式,因此我无法告诉您更多信息。
答案2
即使进入数据库,URL 中使用空格,当 wordpress 将其发送到浏览器时也会进行 URL 编码,因此它会将空格与其实体 %20 进行转换,您可以尝试上面的 SQL 查询,但在 mysqldump --all-databases > my-back.sql 之前进行备份