如何在SPIP的#TEXTE中为img标签添加loading="lazy"属性?
SPIP 4.2 为文章内容图片自动添加懒加载属性
问题原因
你之前的替换方法无效,核心是模板语法的引号冲突,以及未考虑已有loading属性的图片重复添加问题。
解决方案
1. 基础替换(强制给所有img标签添加,不考虑已有属性)
调整模板中的引号使用,避免语法冲突:
[(#TEXTE|replace{'<img'}{'<img loading="lazy"'})]
2. 精准替换(仅给无loading属性的图片添加)
使用正则负向前瞻匹配,跳过已有loading属性的图片,避免重复添加:
[(#TEXTE|replace{'<img(?!.*loading=)[^>]*>'}{'<img loading="lazy" $0>'})]
3. 覆盖已有loading属性(将所有图片的loading统一设为lazy)
如果需要把已有的loading属性强制替换为lazy,用这个规则:
[(#TEXTE|replace{'<img([^>]*)(loading="[^"]+"[^>]*)?>'}{'<img $1 loading="lazy">'})]
补充说明
- 正则中的
(?!.*loading=)是负向前瞻语法,确保匹配的img标签未包含loading属性; $0代表正则匹配到的完整img标签内容,保证原有属性不丢失;- 若需兼容大小写的img标签(如
<IMG),在正则末尾添加i修饰符即可,例如:[(#TEXTE|replace{'<img(?!.*loading=)[^>]*>'}{'<img loading="lazy" $0>'i})]
内容的提问来源于stack exchange,提问作者Nakx
相关产品推荐
相关产品推荐

