Ungkapan biasa untuk mengalih keluar ruang antara teg HTML yang tidak sah - cth. "</b>" hendaklah "</b>"
P粉884667022
P粉884667022 2023-09-02 19:56:28
0
2
506
<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粉884667022
P粉884667022

membalas semua(2)
P粉323050780

Tiada cara yang munasabah untuk menyimpan dokumen yang rosak seperti yang anda siarkan, tetapi dengan mengandaikan anda meletakkan > 和类似字符替换为其相关实体,例如: &gt ; 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>"
P粉064448449

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*(>)/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);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan