Nasıl diğer iki özel karakterler içinde bir karakteri değiştirmek için bir regex kullanabilirsiniz?

2 Cevap php

Ben PHP ile olan bir alanda HTML sağlamak için bir yol uygulama üzerinde çalışıyorum. Karakterler girildiği gibi veritabanına kaydedilir, böylece daha sonra ekrana yazdırırken, ben HTML (güvenlik yüzden tek yapmayın lütfen, burada bir sorun değildir) saygı istiyoruz. Ne şimdi ihtiyacım uygun " karakteri için herhangi bir &quot; örneklerini değiştirmek için bir yoldur, ancak bu bir HTML bildiriminde düştüğünde (yani < ve > karakter). Bu karakterlerin içinde değil, bu değiştirilmemelidir.

Düzenli ifade ile böyle bir şey yapmak için doğru yolu nedir?

2 Cevap

Bu deneyin:

$str = preg_replace('/&quot;(?=[^<>]*+>)/', '"', $str);

Açıklamasından I (declaration gerçekten bu bağlamda bir şey demek değildir) "bir HTML tag içindeki" demek toplamak. Ben de herhangi bir '<' veya etiketinin içine '>' karakter olamaz sanıyorum (çünkü onlar alıntı nitelik değerleri are yasal).

Lookahead (?=[^<>]*+>) burada ve orada arasında başka köşeli orada sağ açılı ayraç kadar ileride olduğunu ve iddia. Her açılı ayraç dengeli bir çiftin parçası olduğunu varsayarsak, o anki pozisyon bir HTML etiketinin içine demek gerekir.

Etiketler bulmak için böyle bir şey? X karakter, ama bir dize ile değiştirilebilir.

<[^>]*X[^>]*>

Ile başlayan bağlantıları bulur pratik bir örnek, <a href:

<a href="([^"]*)"[^>]*>.