Planlama

Description Field Temizleme

HTML Tag & Entity Temizleme İşlemi

11 Ocak 2026

Basit Anlatım (Herkes İçin)

Müzik platformunda genre (tür), playlist, album ve sektör sayfalarında açıklamalar bozuk görünüyor. Ekranda HTML kodları (<p>, </p>) ve bozuk Türkçe karakterler (&uuml; gibi) aynen yazılı çıkıyor.

❌ Şu an nasıl görünüyor:

<p>Lo-Fi m&uuml;zikleriyle huzurlu ve dinlendirici bir atmosfer sunun.</p>

✅ Nasıl olması gerekiyor:

Lo-Fi müzikleriyle huzurlu ve dinlendirici bir atmosfer sunun.

Bu sorunu düzeltmek için:

  • Veritabanındaki tüm açıklama metinlerini temizleyeceğiz
  • HTML kodlarını (<p>, </p>) kaldıracağız
  • Bozuk karakterleri (ü, ı, ş, ğ, ç, ö gibi) düzelteceğiz
  • Temiz, okunabilir metinler elde edeceğiz

Teknik Detaylar (Geliştiriciler İçin)

📊 Etkilenen Tablolar & Field'ler

muzibu_genres

  • description (JSON, translatable)
  • Diller: tr, en

muzibu_playlists

  • description (JSON, translatable)
  • Diller: tr, en

muzibu_albums

  • description (JSON, translatable)
  • Diller: tr, en

muzibu_sectors

  • description (JSON, translatable)
  • Diller: tr, en

🔍 Sorunun Kaynağı

1. HTML Tag Sorunu:

DB'de description field'leri <p> ve </p> tagları ile sarılmış halde saklanmış:

"<p>Lo-Fi müzikleriyle huzurlu ve dinlendirici bir atmosfer sunun.<\/p>"

2. HTML Entity Sorunu:

Türkçe karakterler HTML entity olarak saklanmış:

  • &uuml;ü
  • &ccedil;ç
  • &ouml;ö
  • &Ouml;Ö
  • &Uuml;Ü
  • &Ccedil;Ç
  • &#304;İ
  • &#305;ı

3. View Render Sorunu:

View'lerde {{ }} kullanılmış (HTML escape eder):

{{ $genre->getTranslation('description', app()->getLocale()) }}

Ancak zaten view'de <p class="text-sm..."> tagi var, bu nedenle DB'den gelen HTML taglarına gerek yok!

⚙️ Temizleme Algoritması

  1. 1

    JSON Field Parse Et

    Her bir kayıttaki description JSON'unu parse et, diller için ayrı ayrı işle

  2. 2

    HTML Taglarını Kaldır

    strip_tags() fonksiyonu ile tüm HTML taglarını temizle

  3. 3

    HTML Entity'leri Decode Et

    html_entity_decode() ile tüm HTML entity'leri düz karaktere çevir

  4. 4

    Fazla Boşlukları Temizle

    trim() ve whitespace normalizasyonu

  5. 5

    JSON'a Geri Encode Et

    Temizlenmiş metni JSON formatında DB'ye kaydet

Yapılacaklar (Adım Adım)

1

Veritabanı Backup

Temizlik işleminden ÖNCE güvenlik için backup al

mysqldump tenant_muzibu_1528d0 muzibu_genres muzibu_playlists muzibu_albums muzibu_sectors > backup-descriptions.sql
2

PHP Script Oluştur (Laravel Command)

Tüm tablolardaki description field'lerini temizleyecek Laravel command

  • app/Console/Commands/CleanDescriptionFieldsCommand.php
  • 4 tablo için döngü (genres, playlists, albums, sectors)
  • Her kayıt için JSON parse, temizle, encode
  • İşlem raporu (kaç kayıt temizlendi)
3

Script'i Çalıştır

Tenant context'te command çalıştır

php artisan muzibu:clean-descriptions --tenant=1001
4

Sonuçları Kontrol Et

Genre, playlist, album, sector sayfalarını tarayıcıda test et

  • https://muzibu.com/genres/lo-fi
  • https://muzibu.com/playlists/...
  • https://muzibu.com/albums/...
  • https://muzibu.com/sectors/...
5

Cache Temizle

View ve response cache'i temizle

php artisan view:clear && php artisan responsecache:clear

Riskler & Önlemler

Risk: Veri Kaybı

Description field'leri geri döndürülemez şekilde değiştirilecek

Önlem: Mutlaka backup al!

Risk: Yanlış Encoding

UTF-8 encoding bozulabilir, Türkçe karakterler kaybolabilir

Önlem: html_entity_decode() UTF-8 flag ile kullan

Risk: JSON Bozulması

JSON encode/decode sırasında veri yapısı bozulabilir

Önlem: JSON_UNESCAPED_UNICODE flag kullan

Beklenen Sonuç

Şu Anda (Bozuk)

<p>Lo-Fi m&uuml;zikleriyle huzurlu ve dinlendirici bir atmosfer sunun.</p>

Sonrası (Temiz)

Lo-Fi müzikleriyle huzurlu ve dinlendirici bir atmosfer sunun.
  • Tüm HTML tagları kaldırılmış olacak
  • Tüm HTML entity'ler düz karaktere çevrilmiş olacak
  • Türkçe karakterler doğru görünecek (ü, ı, ş, ğ, ç, ö)
  • Sayfalarda açıklamalar temiz ve okunabilir olacak