Je souhaite implémenter une fonctionnalité qui insère un TAG de rupture de mot si un mot est trop long pour apparaître sur une seule ligne.Comment activer une fonction de suppression de mots par longueur sans division à l'intérieur des caractères spéciaux codés html?
protected string InstertWBRTags(string text, int interval)
{
if (String.IsNullOrEmpty(text) || interval < 1 || text.Length < interval)
{
return text;
}
int pS = 0, pE = 0, tLength = text.Length;
StringBuilder sb = new StringBuilder(tLength * 2);
while (pS < tLength)
{
pE = pS + interval;
if (pE > tLength)
sb.Append(text.Substring(pS));
else
{
sb.Append(text.Substring(pS, pE - pS));
sb.Append("​");//<wbr> not supported by IE 8
}
pS = pE;
}
return sb.ToString();
}
Le problème est: Que puis-je faire si le texte contient des caractères spéciaux codés en html? Que puis-je faire pour empêcher l'insertion d'un tag à l'intérieur d'un ß
? Que puis-je faire pour compter la longueur réelle de la chaîne (qui apparaît dans le navigateur)? Une chaîne comme ♡♥
♡ ♥ ne contient que 2 caractères (coeurs) dans le navigateur, mais sa longueur est de 14
Les méthodes 'HtmlEncode' et' HtmlDecode' ne sont pas symétriques; Le décodage convertira les entités en caractères uniques, mais le codage ne convertira pas tous ces caractères en entités. En outre, si le texte source contient des caractères tels que '<' et des entités telles que '<', il n'y a aucun moyen de distinguer ceux qui ont été décodés. –
Je voulais dire qu'il ne devrait pas utiliser 'HtmlDecode' du tout. Mais cela nécessiterait que la sortie soit Unicode. – svick
Cela fonctionne parfaitement. Les caractères comme