Bonjour à tous
Pour éviter des ruptures de ligne intempestives, j'utilise le caractère "espace insécable", mais quid du tiret?
J'ai essayé le caractère "–" ("ndash"), mais les navigateurs coupent le mot comme si c'était un "-", par exemple la ville de Fontenay–lès–Briis se coupe comme si c'était Fontenay-lès-Briis
Par ailleurs je ne tiens pas à mettre la balise conteneur en white-space: nowrap car il y a des espaces "normaux" à l'intérieur du texte.
Pas très important, mais j'aimerais bien savoir...
Modifié par PapyJP (16 Jun 2017 - 12:12)
Apparemment comme tu dis!
Manifestement ça ne marche pas. Je vais essayer un contournement en mettant un <span> stylé white-space: nowrappour voir ce que ça donne!
Curieux... sur Mozilla Firefox 48, en tout cas, ça fonctionne : le tiret est vraiment insécable.

Smiley sweatdrop
J'y suis finalement parvenu en mettant dans le php qui génère le HTML
$to_HTML = preg_replace('#(\w)-(\w)#', '$1?$2', $to_HTML);

le deuxième "tiret" étant obtenu en copiant le caractère en question depuis une page qui en contenait un.
Pas simple à faire, tous les autres moyens que j'ai essayés ont foiré!
Noter que ce "non breaking hyphen" apparaît sous la forme d'un carré, c'est à dire "caractère non reconnu" sous Nodepad++ et qu'après avoir copié le code depuis Nodepad++ dans le textarea de ce message, ça s'est traduit par un ?
Sa valeur est supposée être U+2011, voir http://www.fileformat.info/info/unicode/category/Pd/list.htm ligne
U+2011 	NON-BREAKING HYPHEN 	?

$to_HTML est le nom de la variable qui contient les chaînes de caractères correspondant au contenu d'une balise quelconque
Modifié par PapyJP (16 Jun 2017 - 16:25)
SolidSnake a écrit :
Bonjour,

J'ai l'air d'avoir un gagnant (j'ai testé tout ceux que j'ai trouvés, XD) :
https://codepen.io/anon/pen/eRBqZe
Fonctionne chez moi sur Chrome 57

Oui, c'est ce qu'on appelle de "l'informatique expérimentale"! Smiley biggrin
A propos (comme on dit quand ça n'a pas grand chose à voir)
En faisant mes essais, j'ai voulu faire une expression régulière
preg_replace('#(\w+-\w+)#', '<span>$1</span>', $to_HTML)

l'idée étant de styler le <span> avec un white-space: nowrap.
Je me suis rendu compte que les caractères accentués ne sont pas reconnus comme étant des caractère de type \w
Y a-t-il un moyen autre que de mettre la liste de tous les caractères accentués dans une expression, du genre [a-zàéèùâêîâêîôûâêîôûç...] pour que le moteur des expressions régulières de PHP s'y retrouve?
Attention tout de même, le NON-BREAKING HYPHEN est rarement inclus dans les polices courantes, ce qui fait que le navigateur va tenter de piocher le caractère dans d'autre polices, avec la technique dite du «bullshit rock'n'roll»

Dans l'exemple de Solidsnake, sur Chrome le texte est en Times et l'hyphen est en Lucida Grande.
Par contre son second exemple sur FF l'hyphen est en «Hiragino Kaku Gothic ProN W3» et en «Songti SC» sur Chrome.

Bref tout cela est très dépendant du navigateur/OS/polices installées, on n'est même pas sûr que le tiret rendu soit de la même taille.

Si on n'utilise pas de webfont qui inclu ce caractère le plus sûr est un bien moche <span> en white-space: no-wrap.
Merci de vos conseils, j'ai fini par faire
$to_HTML = preg_replace('#(^|\s)(\S+-\S+)#', '$1<span class="nobreak">$2</span>', $to_HTML);
Bonjour,

Attention au niveau de l'accessibilité. Les lecteurs d'écran n'apprécient pas trop les <span> au milieu des mots, et ils ne supportent bien évidemment pas les traits d'union virtuels et autres trucs du même genre.

Le résultat dans les deux cas est qu'ils lisent les deux parties de mot comme deux mots séparés, ce qui peut avoir des conséquences gênantes.
Mon programme ne met pas les <span> au milieu des mots, il prend un mot complet qui comprend un trait d'union et le met dans une balise <span>, donc ça ne devrait pas poser de problème.