-- First, let's check what data actually contains HTML SELECT 'Bulletins with HTML tags:' as check_type; SELECT id, title, CASE WHEN scripture_reading LIKE '%<%' THEN 'HAS HTML' ELSE 'CLEAN' END as scripture_status, CASE WHEN sabbath_school LIKE '%<%' THEN 'HAS HTML' ELSE 'CLEAN' END as sabbath_status, CASE WHEN divine_worship LIKE '%<%' THEN 'HAS HTML' ELSE 'CLEAN' END as worship_status FROM bulletins WHERE is_active = true ORDER BY date DESC LIMIT 3; -- Show actual content to see what we're dealing with SELECT 'Current scripture_reading content:' as content_type; SELECT substring(scripture_reading, 1, 100) as sample_content FROM bulletins WHERE is_active = true ORDER BY date DESC LIMIT 1; -- Now let's clean it more aggressively UPDATE bulletins SET scripture_reading = TRIM( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REGEXP_REPLACE(scripture_reading, '<[^>]*>', '', 'g'), '&', '&' ), '<', '<' ), '>', '>' ), '"', '"' ), ''', '''' ), ' ', ' ' ) ), sabbath_school = CASE WHEN sabbath_school IS NOT NULL THEN TRIM( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REGEXP_REPLACE(sabbath_school, '<[^>]*>', '', 'g'), '&', '&' ), '<', '<' ), '>', '>' ), '"', '"' ), ''', '''' ), ' ', ' ' ) ) ELSE sabbath_school END, divine_worship = CASE WHEN divine_worship IS NOT NULL THEN TRIM( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REGEXP_REPLACE(divine_worship, '<[^>]*>', '', 'g'), '&', '&' ), '<', '<' ), '>', '>' ), '"', '"' ), ''', '''' ), ' ', ' ' ) ) ELSE divine_worship END WHERE scripture_reading LIKE '%<%' OR sabbath_school LIKE '%<%' OR divine_worship LIKE '%<%'; -- Verify the cleaning worked SELECT 'After cleaning - scripture_reading content:' as content_type; SELECT substring(scripture_reading, 1, 100) as sample_content FROM bulletins WHERE is_active = true ORDER BY date DESC LIMIT 1;