MySQL / Apache:只在特定的URL中用空格replace空格

我在我的WordPress博客上使用了一些图片时遇到问题。 迁移之后,我将每个图像都改为用下划线replace空格,所以

HIDDEN_264_4062_FOTO_IDF los MID.jpg

被改名为

HIDDEN_264_4062_FOTO_IDF_los_MID.jpg

但是尽pipe这个窍门对于大部分的post都是必要的,但是有些人试图用空格find旧的图片:

这没有find

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数据库中,使用下划线replace.jpg文件中的空格SQL查询。 图像的path总是相同的,所以规则应该改变这一点:

/ files / HIDDEN_264_4062_FOTO_IDF los MID.jpg

/files/HIDDEN_264_4062_FOTO_IDF_los_MID.jpg

“/ files / HIDDEN_264_”部分总是相同的,但其余的不同。 有什么办法来执行这个? 也许在Apache(我们目前的networking服务器)重写规则?

你可以使用mysql replacefunction,如:

 mysql> UPDATE your_table SET your_field = REPLACE(your_field, ' ', '_') WHERE your_field like '/files/HIDDEN_264_%'; 

这将在保存在字段your_field中的文件名中replace所有带下划线的空格。

为了replace部分string中的空格,可以使用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_%'; 

上面的例子只replace了your_field前30个字符的your_field 。 您可以根据您拥有的数据types进行自定义。 如果无法确定正确的长度(本例中为30),则可以使用locatefunctionsearch特定的模式(分隔符)。

我不能告诉你更多,因为我不知道你的数据的格式。

即使进入数据库,当wordpress发送给浏览器时,URL会使用空格来进行URL编码,所以它会将空间转换为实体%20,你可以尝试上面的SQL查询,但是在mysqldump之前做一个备份–all-databases>我-back.sql