Comment faire pour convertir des caractères en entités HTML en utilisant un JavaScript
J'ai le texte suivant:
var text = "Übergroße Äpfel mit Würmern";
Je suis à la recherche d'une fonction Javascript pour transformer le texte de sorte que chaque lettre est représentée par son entité HTML séquence comme ceci:
var newText = magicFunction(text);
...
newText = "Übergroße Äpfel mit Würmern";
La fonction doit non seulement échapper aux lettres de cet exemple mais aussi tous les de ces.
Comment voulez-vous y parvenir? Est-il une fonction existante sur le marché? (Plaine, car une solution sans un cadre est de préférence)
Btw: Oui, j'ai vu cette question mais il ne répond pas à mon besoin.
- j'en ai besoin pour un autre composant qui a besoin de ça dans ce format.
Vous devez vous connecter pour publier un commentaire.
Avec l'aide de bucabay et les conseils pour créer ma propre fonction que j'ai créé ce qui fonctionne pour moi. Que faites vous en pensez, est-il une meilleure solution quelque part?
exemple d'utilisation:
résultat:
Update1: Grâce bucabay de nouveau pour le || - indicateur de
Update2: entité mis à Jour le tableau avec amp,lt,gt,apos,quot, merci
richardtallent pour l'astuce
Update3(en 2014): Mathias Bynens créé une lib appelé à "il", peut-être que ça sert à votre besoin.
escapeHtmlEntities.entityTable[c.charCodeAt(0)] || '#'+c.charCodeAt(0)
de sorte que vous pouvez attraper ces charCode n'est pas dans entityTable.Toutes les autres solutions suggérées ici, ainsi que la plupart des autres bibliothèques JavaScript qui n'en entité HTML de codage/décodage, de faire plusieurs erreurs:
htmlDecode('≼')
doit retourner'≼'
(c'est à dire'\u227C'
).htmlEncode('')
doit retourner quelque chose comme𝌆
ou𝌆
. Si une mise en œuvre renvoie à deux entités distinctes au lieu (par exemple,��
ou��
), il est cassé.htmlDecode('𝌆')
doit retourner''
et pas'팆'
(c'est à dire'\uD306'
).htmlDecode('€')
doit retourner'€'
(c'est à dire'\u20AC'
).htmlDecode('&')
doit retourner'&'
, pas&
.Pour une solution robuste qui permet d'éviter tous ces problèmes, utilisez le il de la bibliothèque pour cela. À partir de son fichier README:
À l'aide d'échappement() devrait collaborer avec le caractère de la portée du code 0x00 à 0xFF (UTF-8).
Si vous allez au-delà de 0xFF (255), comme 0x100 (256), puis escape() ne fonctionnera pas:
et:
Donc, si vous souhaitez couvrir tous Unicode charachacters tel que défini sur http://www.w3.org/TR/html4/sgml/entities.html , alors vous pouvez utiliser quelque chose comme:
Remarque ici la plage est compris entre: \u00A0-\u00FF.
C'est le premier caractère de la portée du code défini dans http://www.w3.org/TR/html4/sgml/entities.html qui est le même que ce escape() couvre.
Vous aurez besoin d'ajouter les autres plages que vous souhaitez couvrir aussi bien, ou la totalité d'entre eux.
Exemple: UTF-8 portée générale, de signes de ponctuation (\u00A0-\u00FF et \u2022-\u2135)
Edit:
BTW: \u00A0-\u2666 doit convertir chaque caractère Unicode code pas à l'intérieur de plage ASCII en entités HTML à l'aveuglette:
alert(prompt('Enter characters to htmlEncode', '').replace(/[\u00A0-\u2666]/g, function(c) { return '&#'+c.charCodeAt(0)+';'; }));
htmlEncode('\x80')
ne doit pas renvoyer de€
ou€
. En fait, il ne devrait pas retourner une entité HTML à tous; il n'y a aucun moyen de représenter ce caractère dans le code HTML. Voir ma réponse pour plus d'informations, et pour une meilleure solution.Vous pouvez utiliser:
Cette fonction HTMLEncodes tout ce qui n'est pas a-z/A-Z.
[Modifier] Un vieux la réponse. Nous allons ajouter une simplification de la Chaîne de l'extension de coder tous les caractères étendus:
--i
est égale à 0 lorsque l'on atteint le premier caractère. Votre état de santé devrait êtrewhile (--i >= 0)
ou vous perdrez le premier caractère de la chaîne d'entrée.i--
, ajusté en fonction de la réponseLa il bibliothèque est la seule fiable à 100% solution que je sais de la!
Il est écrit par Mathias Bynens - l'un des plus renommés au monde JavaScript gourous, et a les caractéristiques suivantes :
Exemple d'utilisation
Avoir une table avec un bazillion replace() appels est lent et pas facile à gérer.
Heureusement, le escape() fonction aussi code pour la plupart des mêmes personnages, et les met dans un format cohérent (%XX, où XX est la valeur hexadécimale du caractère).
Donc, vous pouvez laisser échapper() la méthode de le faire la plupart du travail pour vous et il suffit de changer sa réponse à des entités HTML à la place de l'URL-les caractères échappés:
Il utilise le format hex pour échapper à des valeurs plutôt que les entités nommées, mais pour le stockage et l'affichage des valeurs, il fonctionne tout aussi bien que des entités nommées.
Bien sûr, échapper échappe également les caractères que vous n'avez pas besoin de échapper en HTML (espaces, par exemple), mais vous pouvez ne pas encoder avec un peu de remplacer les appels.
Edit: j'aime bucabay la réponse de mieux que la mienne... en charge d'un plus grand nombre de caractères, et ne nécessite pas de piratage par la suite pour obtenir des places, barres, etc. sans échappement.
htmlEncode('\x80')
ne doit pas renvoyer de€
ou€
. En fait, il ne devrait pas retourner une entité HTML à tous; il n'y a aucun moyen de représenter ce caractère dans le code HTML. Voir ma réponse pour plus d'informations, et pour une meilleure solution.Démo sur JSFiddle
voici un petit stand alone méthode:
je ne sais pas trop à propos de l'unicode, mais il semble bien fonctionner.
Tout renouvellement @bucababy de réponse comme un "bookmarklet", comme il est parfois plus facile que d'utiliser ceux recherche pages:
, par exemple) et il a quelques autres questions trop. Au lieu de ce bookmarklet, envisager d'utiliser mon HTML en ligne entité encodeur/décodeur.
http://mothereff.in/html-entities#%s
comme un moteur de recherche personnalisé pour mon navigateur est beaucoup plus facile, mais si vous insistez:javascript:void (function(){location='http://mothereff.in/html-entities#'+encodeURIComponent(prompt('Enter text to HTML-encode:',''))}())
J'ai résolu mon problème en utilisant
encodeURIComponent()
au lieu deescape()
.Ce qui pourrait être le correctif pour vous si le problème se produit lors de l'envoi de votre chaîne de caractères dans une URL.
Essayer cela avec le membre de phrase ("hi & % ‘")
escape()
retourneAvis de la
%u2018
n'est pas très url amicale et peut briser le reste de la chaîne de requête.encodeURI()
retourneAvis de l'esperluette est toujours là.
encodeURIComponent()
retourneEnfin, l'ensemble de nos caractères sont encodés correctement.
Meilleure solution est affichée à l'phpjs.org la mise en œuvre de la fonction PHP htmlentities
Le format est
htmlentities(string, quote_style, charset, double_encode)
Une documentation complète sur la fonction PHP qui est identique peut être lu ici
J'ai adapté une des réponses de l'référencé question, mais a ajouté la possibilité de définir un mappage explicite pour les noms de personnages.