Tanda hubung lunak dalam HTML (<wbr> vs. & shy;)

154

Bagaimana Anda memecahkan masalah dengan tanda hubung lunak pada halaman web Anda? Dalam sebuah teks mungkin ada kata-kata panjang yang mungkin ingin Anda hilangkan dengan tanda hubung. Tetapi Anda tidak ingin tanda hubung itu ditampilkan jika seluruh kata ada di baris yang sama.

Menurut komentar di halaman ini <wbr> adalah "sup tag tidak ditemukan oleh Netscape". Sepertinya &shy; memiliki masalah dengan kepatuhan standar juga . Tampaknya tidak ada cara untuk mendapatkan solusi yang berfungsi untuk semua browser .

Yang mana cara Anda untuk menangani tanda hubung lunak dan mengapa Anda memilihnya? Apakah ada solusi yang disukai atau praktik terbaik?


Lihat Diskusi SO terkait di sini .

Pontus
sumber
Maaf untuk menutup lebih awal - ini dekat, tetapi tidak persis sama dengan yang lain. Akan meninggalkan tautan.
Chris Marasti-Georg
2
Harap perhatikan bahwa <wbr>tidak seharusnya menjadi tanda hubung sama sekali.
Andreas Rejbrand
Untuk pengujian browser: jsfiddle.net/k2hbrjz8/2 Baik & # 173; atau & malu; tampaknya berfungsi seperti yang diinginkan untuk tampilan dan salin / tempel. <wbr> hanya memilih setengah dari kata saat diklik ganda. Cari menemukan semua di Firefox saat ini (pada tanggal komentar ini). Jika & # 173; indeks lebih baik, gunakan.
karmakaze

Jawaban:

132

Sayangnya, &shydukungan sangat tidak konsisten antar browser sehingga tidak dapat digunakan.

QuirksMode benar - tidak ada cara yang baik untuk menggunakan tanda hubung lunak dalam HTML sekarang. Lihat apa yang dapat Anda lakukan untuk pergi tanpa mereka.

Sunting 2013: Menurut QuirksMode , &shy;sekarang berfungsi / didukung di semua browser utama.

Marco
sumber
11
Sayangnya tidak. Coba cari kata yang berisi tanda hubung lunak di browser Anda. Sebagian besar browser memperlakukannya sebagai dua kata yang terpisah, alih-alih mengabaikan tanda hubung yang lembut.
gclj5
3
@ gclj5 Saya baru saja menguji menemukan &shy;kata di Chrome v21, dan itu benar mengabaikan tanda hubung lembut. Tidak yakin tentang IE, FF dan browser lainnya.
evanrmurphy
6
Ini berfungsi baik (yaitu kata-kata dapat dicari) di FF, Chrome dan Safari baru-baru ini.
MMM
10
Tetapi salin teks dengan & shy; di Chrome mengembalikan teks dengan tanda hubung. Contoh: "uni & shy; later & shy; al." disalin sebagai "uni-later-al."
Enyby
2
Hari ini kami harus menghentikan &shy;penggunaan karena bug khusus di Webkit (yang memengaruhi Safari, Safari iOS, dan Chrome versi terbaru) yang menyebabkan rendering karakter aneh dengan sejumlah besar font khusus (baik yang gratis maupun komersial)
Nico Pernice
58

Ringkasan Februari 2015 (sebagian diperbarui Nov 2017)

Mereka semua berkinerja cukup baik, &#173;mengatasinya karena Google masih dapat mengindeks kata-kata yang mengandungnya.

  • Di browser: &shy; dan &#173;keduanya ditampilkan seperti yang diharapkan di browser utama (bahkan IE lama!). <wbr>tidak didukung di versi terbaru IE (10 atau 11) dan tidak berfungsi dengan baik di Edge.
  • Ketika disalin dan ditempelkan dari browser: (diuji 2015) seperti yang diharapkan untuk &shy;dan &#173;untuk Chrome dan Firefox di Mac, pada Windows (10), itu membuat karakter dan menempelkan tanda hubung yang keras ke dalam Notepad dan tanda hubung yang tidak terlihat ke dalam aplikasi yang mendukungnya. IE (win7) selalu menempel dengan tanda hubung, bahkan dalam IE10, dan salinan Safari (Mac) dengan cara yang ditempelkan sebagai tanda hubung dalam beberapa aplikasi (misalnya MS Word), tetapi tidak yang lain
  • Temukan di halaman berfungsi untuk &shy;dan &#173;di semua browser kecuali IE yang hanya cocok dengan kecocokan disalin dan tempel persis (bahkan hingga IE11)
  • Mesin pencari: Google mencocokkan kata-kata yang mengandung kata- &#173;kata yang diketik secara normal. Pada 2017 tampaknya tidak cocok lagi dengan kata-kata yang mengandung &shy;. Yandex appers menjadi sama. Bing dan Baidu juga tampaknya tidak cocok.

Menguji

Untuk pengujian langsung terkini, berikut adalah beberapa contoh kata unik dengan tanda hubung lunak.

  • &shy;- confumbabbl&shy;ication&shy;ism- confumbabblicationism
    • .................................................. .................................................. .......... confumbabblicationism
    • .................................................. .................................................. .............. confumbabblicationism

<wbr>- donfounbabbl<wbr>ication<wbr>ism. Situs ini menghapus <wbr/>dari output. Berikut cuplikan jsbin.com untuk pengujian .

  • &#173;- eonfulbabbl&#173;ication&#173;ism- ebfulbabblicationism
    • .................................................. .................................................. ............. eonfulbabblicationism
    • .................................................. .................................................. ................ ebfulbabblicationism

Di sini mereka tanpa tanda hubung pemalu (ini untuk menyalin dan menempel ke pengujian menemukan-di-halaman; ditulis dengan cara yang tidak akan merusak tes mesin pencari):

ZZZconfumbabblicationismZZZdonfounbabblicationismZZZeonfulbabblicationismZZZ

Tampilkan di seluruh browser

Sukses: ditampilkan sebagai kata normal, kecuali di mana kata itu harus patah, ketika kata itu pecah dan tanda hubung di tempat yang ditentukan.

Kegagalan: menampilkan tidak biasa, atau gagal pecah di tempat yang dituju.

  • Chrome (40.0.2214.115, Mac): &shy;sukses, <wbr>sukses, &#173;sukses
  • Firefox (35.0.1, Mac): &shy;sukses, <wbr>sukses, &#173;sukses
  • Safari (6.1.2, Mac): &shy;sukses, <wbr> belum diuji , &#173;sukses
  • Edge (Windows 10): &shy;sukses, <wbr> gagal (putus tapi tidak ada tanda hubung), &#173;sukses
  • IE11 (Windows 10): &shy;sukses, <wbr> gagal (tanpa istirahat), &#173;sukses
  • IE10 (Windows 10): &shy;sukses, <wbr> gagal (tanpa istirahat), &#173;sukses
  • IE8 (Windows 7): tidak menentu - kadang-kadang, tidak ada yang bekerja sama sekali dan mereka semua hanya mengikuti css word-wrap. Kadang-kadang, mereka sepertinya berhasil. Belum ditemukan pola yang jelas mengapa.
  • IE7 (Windows 7): &shy;sukses, <wbr>sukses, &#173;sukses

Salin-tempel di browser

Sukses: menyalin dan menempelkan seluruh kata, tanpa cacat. (diuji pada Mac paste ke pencarian browser, MS Word 2011, dan Sublime Text)

Kegagalan: menempel dengan tanda hubung, spasi, baris, atau dengan karakter sampah.

  • Chrome (40.0.2214.115, Mac): &shy;sukses, <wbr>sukses, &#173;sukses
  • Firefox (35.0.1, Mac): &shy;sukses, <wbr>sukses, &#173;sukses
  • Safari (6.1.2, Mac): &shy; gagal menjadi MS Word (menyisipkan semua sebagai tanda hubung), sukses di aplikasi lain <wbr> gagal , &#173; gagal ke MS Word (menyisipkan semua sebagai tanda hubung), sukses di aplikasi lain
  • IE10 (Win7): &shy; gagal pasta semua sebagai tanda hubung, <wbr> gagal , &#173; gagal pasta semua sebagai tanda hubung
  • IE8 (Win7): &shy; gagal pasta semua sebagai tanda hubung, <wbr> gagal , &#173; gagal pasta semua sebagai tanda hubung
  • IE7 (Win7): &shy; gagal pasta semua sebagai tanda hubung, <wbr> gagal , &#173; gagal pasta semua sebagai tanda hubung

Pencocokan mesin pencari

Diperbarui pada November 2017. <wbr>tidak diuji karena CMS StackOverflow menghapusnya.

Sukses: pencarian pada keseluruhan, kata yang tidak ditulis dengan tanda penghubung menemukan halaman ini.

Kegagalan: mesin pencari hanya menemukan halaman ini pada pencarian untuk segmen kata yang patah, atau kata dengan tanda hubung.

  • Google: &shy;gagal, &#173;berhasil
  • Bing: &shy;gagal, &#173;gagal
  • Baidu: &shy;gagal, &#173;gagal (dapat mencocokkan fragmen dalam string yang lebih panjang tetapi tidak dengan kata-kata yang berisi &#173;atau &shy;)
  • Yandex: &shy;gagal, &#173;berhasil (walaupun mungkin itu cocok dengan fragmen string seperti Baidu, tidak 100% yakin)

Temukan di halaman di seluruh browser

Berhasil dan gagal sebagai pencocokan mesin pencari.

  • Chrome (40.0.2214.115, Mac): &shy;sukses, <wbr>sukses, &#173;sukses
  • Firefox (35.0.1, Mac): &shy;sukses, <wbr>sukses, &#173;sukses
  • Safari (6.1.2, Mac): &shy;sukses, <wbr>sukses, &#173;sukses
  • IE10 (Win7): &shy; gagal hanya cocok ketika keduanya berisi tanda hubung pemalu, <wbr>sukses, &#173; gagal hanya cocok ketika keduanya berisi tanda hubung pemalu
  • IE8 (Win7): &shy; gagal hanya cocok ketika keduanya berisi tanda hubung pemalu, <wbr>sukses, &#173; gagal hanya cocok ketika keduanya berisi tanda hubung pemalu
  • IE7 (Win7): &shy; gagal hanya cocok ketika keduanya berisi tanda hubung pemalu, <wbr>sukses, &#173; gagal hanya cocok ketika keduanya berisi tanda hubung pemalu
user56reinstatemonica8
sumber
Hari ini, <wbr/>berfungsi di Firefox dan Chrome. (Dan, jujur ​​saja, saya kira itu terjadi bahkan pada bulan Februari, setidaknya pada Windows.)
Andreas Rejbrand
1
Saya menggunakan versi terbaru Chrome dan Firefox di Windows 7, dan <wbr/>berfungsi di keduanya. Harap perhatikan bahwa <wbr>elemen tidak seharusnya menambahkan tanda hubung ketika terjadi break. Dengan kata lain, <wbr/>dan &shy; yang tidak seharusnya melakukan hal yang sama .
Andreas Rejbrand
Ah, melihat itu, sepertinya SE's CMS telah menghapus <wbr/>s dari markup terakhir, sambil menyimpannya dalam kode sumber. Sialan kau! Akan mengedit ..
user56reinstatemonica8
Aneh, tidak bisa mereproduksi 'bug' itu.
Andreas Rejbrand
Apakah ada gunanya dalam pengujian &shy;dan &#173;? Begitu mereka mencapai DOM mereka secara harfiah sama ; hanya di tokenizer HTML keduanya berbeda.
gsnedders
32

Ada upaya berkelanjutan untuk membakukan hyphenation di CSS3 .

Beberapa browser modern, terutama Safari dan Firefox, sudah mendukung ini. Berikut ini adalah referensi yang baik dan terkini tentang dukungan browser .

Setelah hyphenation CSS diterapkan secara universal, itu akan menjadi solusi terbaik. Sementara itu, saya dapat merekomendasikan Hyphenator - sebuah skrip JS yang mencari cara untuk hyphenate teks Anda dengan cara yang paling sesuai untuk browser tertentu.

Tanda hubung:

  • mengandalkan algoritma hyphenation Franklin M. Liangs , umumnya dikenal dari LaTeX dan OpenOffice.
  • menggunakan hyphenation CSS3 di mana itu tersedia,
  • secara otomatis memasukkan &shy;pada sebagian besar browser lain,
  • mendukung banyak bahasa,
  • sangat dapat dikonfigurasi,
  • mundur dengan anggun jika javascript tidak diaktifkan.

Saya sudah menggunakannya dan itu bekerja dengan baik!

Dominik
sumber
Firefox mendukung properti tersebut, tetapi tidak melakukan apa pun ketika diterapkan
bob0the0mighty
Saya salah, Firefox tidak berfungsi tetapi Anda harus memasukkan jenis lang di tag html Anda.
bob0the0mighty
Skrip Hyphenator tampaknya tidak lagi dipertahankan, tetapi ada versi baru dari penulis yang sama yang tersedia di sini: github.com/mnater/Hyphenopoly
MattFisch
20

Saya menggunakan &shy;, dimasukkan secara manual jika perlu.

Saya selalu merasa kasihan bahwa orang tidak menggunakan teknik karena ada beberapa browser — mungkin lama atau aneh — yang tidak menangani mereka seperti cara yang ditentukan. Saya menemukan bahwa &shy;berfungsi dengan baik di browser Internet Explorer dan Firefox baru-baru ini, itu sudah cukup. Anda dapat menyertakan pemeriksaan peramban yang memberi tahu orang-orang untuk menggunakan sesuatu yang matang atau melanjutkan dengan risiko mereka sendiri jika mereka menemukan peramban yang aneh.

Silabusifikasi tidak mudah dan saya tidak bisa merekomendasikan untuk membiarkannya menggunakan Javascript . Ini adalah topik khusus bahasa dan mungkin perlu direvisi dengan hati-hati oleh petugas jika Anda tidak ingin teks Anda menjengkelkan. Beberapa bahasa, seperti Jerman, membentuk kata majemuk dan cenderung menyebabkan masalah penguraian. Misalnya Spargelder( kuman. Uang yang disimpan, jamak) dapat, dengan aturan suku kata, dibungkus dalam dua tempat ( Spar-gel-der). Namun, membungkusnya di posisi kedua, mengubah bagian pertama yang muncul sebagai Spargel-( kuman. Asparagus), mengaktifkan konsep yang sepenuhnya menyesatkan di kepala pembaca dan karenanya harus dihindari.

Dan bagaimana dengan talinya Wachstube? Ini bisa berarti 'ruang penjaga' ( Wach-stu-be) atau 'tabung lilin' ( Wachs-tu-be). Anda mungkin dapat menemukan contoh lain dalam bahasa lain juga. Anda harus bertujuan untuk menyediakan lingkungan di mana petugas dapat didukung dalam menciptakan teks yang memiliki suku kata yang baik, pembacaan bukti setiap kata penting.

Matthias Ronge
sumber
6
Contoh umum dalam bahasa Inggris Spar-gelder vs Spargel-der adalah "re-cord" vs "rec-ord" (homograf tetapi bukan homofon). Yang pertama adalah kata kerja, yang terakhir adalah kata benda. Algoritma biasanya tidak cukup pintar untuk ini, bahkan dalam bahasa Inggris (salah satu bahasa yang didukung terbaik di TI).
Nicholas Shanks
38
Saya akan menyarankan pertukaran pakar vs pertukaran seks pakar
CJ Dennis
13

Sangat penting untuk memperhatikan bahwa, pada HTML5, <wbr>dan &shy; tidak seharusnya melakukan hal yang sama !

Tanda hubung lembut

&shy;adalah tanda hubung lunak, yaitu, U + 00AD: SOFT HYPHEN. Sebagai contoh,

innehålls&shy;förteckning

mungkin diterjemahkan sebagai

innehållsförteckning

atau sebagai

innehålls-
förteckning

Sampai hari ini, tanda hubung lunak berfungsi di Firefox, Chrome, dan Internet Explorer.

The wbrelemen

The wbrelemen adalah kesempatan kata-break, yang tidak akan menampilkan tanda hubung jika satu baris terjadi. Sebagai contoh,

ABCDEFG<wbr/>abcdefg

mungkin diterjemahkan sebagai

ABCDEFGabcdefg

atau sebagai

ABCDEFG
abcdefg

Sampai hari ini, elemen ini berfungsi di Firefox dan Chrome.

Andreas Rejbrand
sumber
4

The ruang nol-lebar badan dapat digunakan di tempat <wbr>tag andal di hampir semua platform.

&#8203;

Juga berguna adalah kata joiner entity, yang dapat digunakan untuk melarang istirahat. (Sisipkan antara setiap karakter kata, kecuali di mana Anda ingin istirahat.)

&#8288;

Dengan keduanya, Anda bisa melakukan apa saja.

AVL geek
sumber
1
Ruang nol-lebar (ZWSP, U + 200B, &#8203;) adalah tepat seperti apa <wbr>(iirc; sudah lama) tetapi lebih baik didukung (secara universal, saat ini). Ini persis apa yang saya cari, karena tidak menambahkan tanda hubung ke kata-kata yang rusak, memungkinkan misalnya nilai yang dipisahkan koma untuk membungkus ketika dijalankan melalui s/,/,\&#8203;/gpengganti.
Adam Katz
2

Ini adalah solusi crossbrowser yang saya lihat beberapa waktu lalu yang berjalan pada klien dan menggunakan jQuery:

(function($) { 
  $.fn.breakWords = function() { 
    this.each(function() { 
      if(this.nodeType !== 1) { return; } 

      if(this.currentStyle && typeof this.currentStyle.wordBreak === 'string') { 
        //Lazy Function Definition Pattern, Peter's Blog 
        //From http://peter.michaux.ca/article/3556 
        this.runtimeStyle.wordBreak = 'break-all'; 
      } 
      else if(document.createTreeWalker) { 

        //Faster Trim in Javascript, Flagrant Badassery 
        //http://blog.stevenlevithan.com/archives/faster-trim-javascript 

        var trim = function(str) { 
          str = str.replace(/^\s\s*/, ''); 
          var ws = /\s/, 
          i = str.length; 
          while (ws.test(str.charAt(--i))); 
          return str.slice(0, i + 1); 
        }; 

        //Lazy Function Definition Pattern, Peter's Blog 
        //From http://peter.michaux.ca/article/3556 

        //For Opera, Safari, and Firefox 
        var dWalker = document.createTreeWalker(this, NodeFilter.SHOW_TEXT, null, false); 
        var node,s,c = String.fromCharCode('8203'); 
        while (dWalker.nextNode()) { 
          node = dWalker.currentNode; 
          //we need to trim String otherwise Firefox will display 
          //incorect text-indent with space characters 
          s = trim( node.nodeValue ).split('').join(c); 
          node.nodeValue = s; 
        } 
      } 
    }); 

    return this; 
  }; 
})(jQuery); 
anthonyv
sumber
2

Saya sarankan menggunakan wbr, jadi kodenya bisa ditulis seperti ini:

<p>这里有一段很长,很长的<wbr
></wbr>文字;这里有一段</p>

Itu tidak akan memimpin ruang antara karakter, sementara &shy;tidak akan menghentikan ruang yang dibuat oleh jeda baris.

Weijing Jay Lin
sumber
2

Saya berhasil menggunakan karakter soft hyphen unicode di beberapa browser desktop dan mobile untuk menyelesaikan masalah ini.

Simbol unicode adalah \u00ADdan cukup mudah untuk dimasukkan ke dalam string unicode Python seperti s = u'Языки и методы програм\u00ADми\u00ADро\u00ADва\u00ADния'.

Solusi lain adalah dengan memasukkan unicode char itu sendiri, dan string sumber akan terlihat sangat biasa di editor seperti Sublime Text, Kate, Geany, dll. (Kursor akan merasakan simbol yang tidak terlihat sekalipun).

Editor hex alat in-house dapat mengotomatisasi tugas ini dengan mudah.

Kludge yang mudah adalah dengan menggunakan karakter langka dan terlihat, seperti ¦, yang mudah untuk disalin dan ditempel, dan menggantinya dengan menggunakan tanda hubung lunak, misalnya skrip frontend di $(document).ready(...). Kode sumber seperti s = u'Языки и методы про¦гра¦м¦ми¦ро¦ва¦ния'.replace('¦', u'\u00AD')lebih mudah dibaca daripada s = u'Языки и методы про\u00ADг\u00ADра\u00ADм\u00ADми\u00ADро\u00ADва\u00ADния'.

dmitry_romanov
sumber
0

Terkadang browser web tampaknya lebih memaafkan jika Anda menggunakan string Unicode &#173;daripada &shy;entitas.

Tommy Kronkvist
sumber
0

Jika Anda bernasib buruk dan masih harus menggunakan JSF 1, maka satu-satunya solusi adalah menggunakan & # 173 ;, & pemalu; tidak bekerja.

Jaap D
sumber
0

<wbr> dan & malu;

Hari ini kamu bisa menggunakan keduanya.

<wbr> gunakan untuk merusak dan tidak menaruh informasi lebih lanjut.

Contoh, gunakan untuk menampilkan tautan:

 https://stackoverflow.com/questions/226464/soft-hyphen-in-html-wbr-vs-shy

&pemalu; bila perlu, pada titik ini teks akan pecah dan menambahkan tanda hubung.

Contoh:

"É im & shy; pos & shy; sí & shy; vel pa & shy; ra um ho & shy; mem a & shy; pren & shy; der a & shy; qui & shy; lo que ele acha que já sa & shy; be."

div{
  max-width: 130px;
  border-width: 2px;
  border-style: dashed;
  border-color: #f00;
  padding: 10px;
}
<div>https://<wbr>stackoverflow.com<wbr>/questions/226464<wbr>/soft-hyphen-in-<wbr>html-wbr-vs-shy</div>

<div>É im&shy;pos&shy;sí&shy;vel pa&shy;ra um ho&shy;mem a&shy;pren&shy;der a&shy;qui&shy;lo que ele acha que já sa&shy;be.</div>

Roberto Góes
sumber