cari

Rumah  >  Soal Jawab  >  teks badan

Ungkapan biasa untuk mengalih keluar ruang antara teg HTML yang tidak sah - cth. "</b>" hendaklah "</b>"

<p>Saya mempunyai beberapa HTML yang dikacaukan oleh ruang dalam teg dan mahu menjadikannya sah semula - contohnya: </p> <pre class="brush:php;toolbar:false;">< div class='test' >1 >b >benar</ b> pisang< / div ></pre> <p> hendaklah ditukar kepada HTML yang sah, dan apabila dipaparkan, dijangka menghasilkan: </p> <p> <pre class="snippet-code-html lang-html prettyprint-override"><code><div class='test'>1 > 0 adalah <b>benar</b> >>> pisang</div></code></pre> </p> <p>Sebarang teks yang didahului/diikuti dengan ruang dalam <kod>></kod> atau </kod>><</kod> hendaklah kekal tidak berubah - contohnya, <kod> ;1 >0</kod> hendaklah dikekalkan dan bukannya dimampatkan kepada <kod>1>0</kod></p > <p>Saya sedar ini mungkin memerlukan beberapa ungkapan biasa, yang tidak mengapa</p> <p>Saya ada beberapa perkara:</p> <p><kod><s?/s*</code> Ini akan membetulkan sebahagian <kod></ b></ div ></code> ;/b></div ></code> <p>Sebagai contoh, saya boleh mengambil pendekatan drastik, tetapi itu juga akan memecahkan kod dalam bahagian teks label, bukan nama label itu sendiri</p>
P粉884667022P粉884667022449 hari yang lalu504

membalas semua(2)saya akan balas

  • P粉323050780

    P粉3230507802023-09-03 16:42:37

    Tiada cara yang munasabah untuk menyimpan dokumen yang rosak seperti yang anda siarkan, tetapi dengan mengandaikan anda meletakkan > 和类似字符替换为其相关实体,例如: > ; dalam teks, anda boleh meletakkan dokumen yang anda ingin terima ke dalam perpustakaan yang sesuai seperti DomDocument yang akan menjaga berehat.

    $input = <<<_E_
    < div class='test' >1 > 0 is < b >true</ b> and apples >>> bananas< / div >
    _E_;
    
    $input = preg_replace([ '#<\s+#', '#</\s+#' ], [ '<', '</' ], $input);
    
    $d = new DomDocument();
    $d->loadHTML($input, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    
    var_dump($d->saveHTML());
    

    Keluaran:

    string(80) "<div class="test">1 > 0 is <b>true</b> and apples >>> bananas</div>"
    

    balas
    0
  • P粉064448449

    P粉0644484492023-09-03 11:17:47

    Regex ini juga berfungsi:

    Ia membahagikan bahagian yang sah dalam teg HTML kepada empat bahagian dan menggantikan bahagian yang tinggal (ruang) dengannya.

    Demo Regex101

    /(<)s*(/?)s*([^<>]*S)s*(>)/g

    • (<) - Tangkap kurungan sudut bukaan (bahagian 1)
    • s* - sepadan dengan mana-mana ruang
    • (/?) - Menangkap garis miring ke belakang pilihan (Bahagian 2)
    • s* - sepadan dengan mana-mana ruang selepas garis miring ke belakang
    • ([^<>]*S) - Tangkap kandungan dalam tag tanpa ruang di belakang (bahagian 3)
    • s* - Padankan ruang selepas kandungan dan sebelum kurungan sudut kanan
    • (>) - Menangkap kurungan sudut kanan (bahagian 4)

    const reg = /(<)\s*(\/?)\s*([^<>]*\S)\s*(>)/g
    const str = "< div class='test' >1 > 0 is < b >true< / b > and apples >>> bananas< / div  >"
    const newStr = str.replace(reg, "");
    console.log(newStr);

    balas
    0
  • Batalbalas