Назад | Перейти на главную страницу

MySQL / Apache: заменяйте пробелы подчеркиванием только в определенных URL-адресах.

У меня проблема с некоторыми изображениями, которые я использую в своем блоге WordPress. После миграции я переименовал каждое изображение, заменив пробелы на подчеркивания, поэтому

HIDDEN_264_4062_FOTO_IDF los 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».

Я хотел бы знать, могу ли я сделать SQL-запрос в моей базе данных WordPress MySQL, который заменяет пробелы в файлах .jpg знаками подчеркивания. Путь изображений всегда один и тот же, поэтому правило должно это преобразовать:

/ files / HIDDEN_264_4062_FOTO_IDF los MID.jpg

/files/HIDDEN_264_4062_FOTO_IDF_los_MID.jpg

часть "/ files / HIDDEN_264_" всегда одна и та же, но остальное меняется. Есть ли способ выполнить это? Может быть, правило перезаписи на Apache (нашем текущем веб-сервере)?

даже если в базе данных URL-адрес использует пробелы, когда wordpress отправляет его в браузер, он будет кодировать URL-адрес, поэтому он будет преобразовывать пробелы с их сущностью% 20, вы можете попробовать SQL-запрос выше, но сделайте резервную копию перед mysqldump --all-databases> my-back.sql

Вы можете использовать mysql replace функционировать как:

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 функция для поиска определенного шаблона (разделителя).

Я не могу вам сказать больше, так как я не знаю формата ваших данных.