Plus intelligente word-wrap en PHP pour les mots longs?
Je suis à la recherche d'un moyen de faire de word-wrap en PHP un peu plus intelligent. Afin de ne pas les casser des mots longs en laissant préalable petits mots seul sur une ligne.
Disons que j'ai ce (le texte réel est toujours complètement dynamique, c'est juste pour montrer):
wordwrap('hello! heeeeeeeeeeeeeeereisaverylongword', 25, '<br />', true);
Ce sorties:
bonjour!
heeeeeeeeeeeeeeereisavery
longword
Voir, il laisse le petit mot seul sur la première ligne.
Comment puis-je obtenir à la sortie de quelque chose de plus comme ceci:
bonjour! heeeeeeeeeeee
eeereisaverylongword
Il utilise tout l'espace disponible sur chaque ligne. J'ai essayé plusieurs fonctions personnalisées, mais aucun n'a été efficace (ou ils avaient quelques inconvénients).
Ouais, je ne sais pas. Vous pouvez utiliser le CSS méthode d'enveloppement, ou ce stackoverflow.com/questions/9815040/... (si c'est pour naviguer sur le web, etc.). La paix
OriginalL'auteur mowgli | 2012-03-22
Vous devez vous connecter pour publier un commentaire.
J'ai eu un aller à la fonction personnalisée pour cette smart wordwrap:
MODIFIER: Repéré un couple de mises en garde. Un bémol de taille avec cela (et aussi avec la fonction native) est le manque de support multi-octets.
La signature de la fonction est justement de retour à la ligne (sans la pause paramètre), il définit une valeur par défaut envelopper largeur de 75 caractères.
rien, c'est juste les valeurs par défaut il utilise. Dans le cas où vous ne fournissez pas votre propre avec de
11
, puis75
sera utilisé.Ah ok. Passons sur multibyte soutien cbuckley 😉 eh Bien je n'en ai pas besoin pour cela de toute façon
Il semble que cette solution gère les deux cas - 1. long mot, sans espace et 2. long mot avec des espaces. Un avantage sur @frglps de la solution
OriginalL'auteur cmbuckley
Comment sur
Les sorties qui
str_split() convertit la chaîne en un tableau de $briser la taille des morceaux.
implode() rejoint le tableau d'ensemble, comme une chaîne à l'aide de la colle qui dans ce cas est un marqueur de fin de ligne (PHP_EOL), mais il pourrait tout aussi bien être un"
<br/>
'vous êtes des génies. Merci pour votre réponse ...
yow même qu'il est en 2017, c'est très utile! Merci 🙂
OriginalL'auteur frglps
C'est aussi une solution (pour les navigateurs, etc.):
Il met un
<wbr>
à des mots de plus de 20 caractères<wbr>
signifie "changement de mot occasion" de sorte qu'il seulement des pauses si il (dicté par la largeur de l'élément/explorateur/visualiseur/autres). Il est invisible autrement.Bon pour liquide/responsive layout où il n'y a pas de largeur fixe. Et ne pas envelopper bizarre comme php wordwrap
OriginalL'auteur mowgli
Vous pouvez utiliser les CSS pour accomplir cette tâche.
Qui va briser le mot pour vous. Voici un lien pour le voir en action:
http://www.css3.info/preview/word-wrap/
cela n'a pas fonctionné pour moi. Je l'ai essayé sur une table de td. J'ai appliqué des
width
dans le style etword-wrap: break-word;
C'est en 2014 et toujours pas de travail dans chaque navigateur. Parfois, php couvre les fesses.
OriginalL'auteur brenjt
Cela devrait faire l'affaire...
Vous ne savez pas exactement comment vous essayez de le faire, mais pourquoi ne pas changer de manière dynamique? Juste utiliser des variables pour définir votre texte
Le changement dynamique de quoi? Le texte peut être n'importe quoi, n'importe quelle longueur, un certain nombre de mots. Je ne sais pas quel est le premier mot ou n'importe quel mot sera 😉
Oh, gotcha. Puis, je suppose que vous auriez besoin de créer une fonction personnalisée.
😉 Avez-vous une idée de comment? Je sais que je devrais probablement utiliser certains regex, mais ne sais pas comment faire..
OriginalL'auteur Paul Dessert