MySQL 5.6中替换HTML描述里img标签文件名空格为连字符
MySQL 5.6 替换img标签src中文件名空格为横杠的解决方案
方案一:自定义函数(推荐)
由于MySQL 5.6不支持REGEXP_REPLACE,可以创建自定义函数精准处理所有img标签的src属性,仅替换文件名部分的空格为横杠:
1. 创建自定义函数
需具备CREATE ROUTINE权限,执行以下SQL:
DELIMITER // CREATE FUNCTION replace_img_filename_spaces(input_text TEXT) RETURNS TEXT DETERMINISTIC BEGIN DECLARE img_start INT; DECLARE src_start INT; DECLARE src_end INT; DECLARE src_content TEXT; DECLARE filename_start INT; DECLARE filename_part TEXT; DECLARE processed_src TEXT; DECLARE result TEXT; SET result = input_text; -- 循环处理所有img标签 SET img_start = LOCATE('<img', result); WHILE img_start > 0 DO -- 定位src属性起始位置(跳过src=") SET src_start = LOCATE('src="', result, img_start); IF src_start = 0 THEN SET img_start = LOCATE('<img', result, img_start + 4); CONTINUE; END IF; SET src_start = src_start + 5; -- 定位src属性结束的引号 SET src_end = LOCATE('"', result, src_start); IF src_end = 0 THEN SET img_start = LOCATE('<img', result, img_start + 4); CONTINUE; END IF; -- 提取src完整内容 SET src_content = SUBSTRING(result, src_start, src_end - src_start); -- 定位文件名起始位置(最后一个/之后) SET filename_start = LOCATE('/', REVERSE(src_content)); IF filename_start > 0 THEN SET filename_start = LENGTH(src_content) - filename_start + 1; -- 替换文件名中的空格为横杠 SET filename_part = REPLACE(SUBSTRING(src_content, filename_start + 1), ' ', '-'); -- 拼接处理后的src内容 SET processed_src = CONCAT(SUBSTRING(src_content, 1, filename_start), filename_part); -- 替换回原字符串 SET result = CONCAT( SUBSTRING(result, 1, src_start - 1), processed_src, SUBSTRING(result, src_end) ); END IF; -- 定位下一个img标签 SET img_start = LOCATE('<img', result, src_end); END WHILE; RETURN result; END // DELIMITER ;
2. 执行更新操作
务必先备份数据,如果是InnoDB引擎,可通过事务测试后执行:
-- 开启事务 START TRANSACTION; -- 先测试查询,验证处理结果是否符合预期 SELECT description, replace_img_filename_spaces(description) FROM product_description WHERE description LIKE '%<img%src="% %"'; -- 确认结果无误后执行更新 UPDATE product_description SET description = replace_img_filename_spaces(description) WHERE description LIKE '%<img%src="% %"'; -- 提交事务 COMMIT;
方案二:无权限创建函数时的分步替换(仅适用于路径目录无空格的场景)
如果无法创建自定义函数,且确认src属性中仅文件名部分存在空格,可多次执行REPLACE语句:
-- 第一次替换:处理/后的第一个空格 UPDATE product_description SET description = REPLACE(description, '/ ', '/-') WHERE description LIKE '%<img%src="%/% "%'; -- 第二次替换:处理文件名中间剩余的空格(如有多个) UPDATE product_description SET description = REPLACE(description, ' ', '-') WHERE description LIKE '%<img%src="%/%-% "%';
注:此方法可能误替换src中其他位置的空格,仅在目录路径无空格时使用
内容的提问来源于stack exchange,提问作者Aman Verma
相关产品推荐
相关产品推荐

