PHP: Nasıl tüm HTML etiketleri çift tırnak tek teklif dönüştürmek için?

6 Cevap php

How can I convert all single quotes to double quotes in all HTML tags only? Is there an easier way to do it? Thanks :)

For example: How can I convert this string (actual data from my work):

<TEXTFORMAT LEADING='2'><P ALIGN='LEFT'><FONT FACE='Verdana' style="font-size:10' COLOR='#0B333C'>My name's Mark</FONT></P></TEXTFORMAT>

Buna:

<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" style="font-size:10" COLOR="#0B333C">My name's Mark</FONT></P></TEXTFORMAT>

6 Cevap

Eğer başka bir yerde belirtilen JavaScript ve CSS sorunları hakkında umurumda değil, bu deneyin:

$text = "<TEXTFORMAT LEADING='2'><P ALIGN='LEFT'><FONT FACE='Verdana' style='font-size:10' COLOR='#0B333C'>My name's Mark</FONT></P></TEXTFORMAT>";
echo preg_replace('/<([^<>]+)>/e', '"<" . str_replace("\\\\\'", \'"\', "$1") . ">"', $text);

Bu devshed.com size tam olarak aynı sorun üzerinde birisi tarafından bir iplik alınır.

Ben tahmin ediyorum ki size bir nitelik içeren tüm tek tırnak demek, tüm html etiketleri söylüyorlar. Sen <a onclick="alert('hi')"> bu kodu kıracak b / c dönüştürülmüş istemem.

Any regular expression is going to be fragile. Eğer biliyorsanız, giriş basit durumlarda, belirli bir dizi olacak, you might be ok with a regex. Aksi takdirde, onmouseover="(function () { document.getElementById(''); alert(\"...\")...})()" (örneğin) gibi kompleks html biçimlendirme anlayan bir DOM ayrıştırıcı isteyeceksiniz. Bir öznitelik birden fazla satıra yayılabilirler olduğunu ekleyin. ;)

Geçenlerde bu sorunu çözmek zorunda değil, ama belki HTML Tidy (burada daha fazla: http://devzone.zend.com/article/761) ile bunu yapmak için iyi bir yol var bu bir {[(gibi veya Çözümleyici 2)]}

Eğer başarmak için çalışıyoruz tam olarak ne gerçekten emin değil ... php kullanarak sicim değiştirilmesi str_replace fonksiyonu kullanılarak yapılabilir:

str_replace("'", "\"", $yourString);

Tidy hangi HTML çorba ve çıkış temiz XHTML çözebilirsiniz kullanın. Bu vesaire, vesaire, yuvalama sorunları tespit etiketleri lowercasing gibi, çok başka güzel şeyler yapar.

Ben regex kullanarak hav'e biliyorum, ama bu bir deneyin: atamak kullanarak $string içerikleri fpen(), fread() etc...

$string = str_replace("'", '"', $string);
$array = explode('>', $string);
foreach($array as $key => $value){
    if(strpos($value, '<') <> 0 ){
       $array[$key] = str_replace('"', "'",$value);
    }
}
$string = implode('>',$array);

Ben bir dom çözümleyici ya gitmek veya ("he said \"blah\"" he said \, {[gibi almaz böylece alıntı karakterler kaçan yanı sıra alıntı anlayan benim kendi basit etiket ayrıştırıcı rulo olacak 2)]} ve empty string.

Bu modifiye edilmesi alıntı kolayca bir etiketi içinde olup olmadığını algılayabilir. Uzun yıllar boyunca ben düzenli ifadeler gibi görevler için yol çok kırılgan olduğunu öğrendim.