有谁知道如何将特殊字符转换为HTML
inJavascript
吗?
例:
&
(&)变成&
。"
(双引号)成为"
何时ENT_NOQUOTES
未设置。'
(单引号)'
仅在ENT_QUOTES
被设置。<
(少于)变为<
。>
(大于)变为>
。
有谁知道如何将特殊字符转换为HTML
inJavascript
吗?
例:
&
(&)变成 &
。"
(双引号)成为"
何时ENT_NOQUOTES
未设置。'
(单引号)'
仅在ENT_QUOTES
被设置。<
(少于)变为 <
。>
(大于)变为>
。Answers:
您需要一个功能类似于
return mystring.replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, """);
但是要考虑到您希望对单/双引号进行不同处理的愿望。
/g
在正则表达式中表示“全局”。简而言之,所有出现的字符串将被替换。没有/g
只有第一场比赛将被替换。
我认为最好的方法是使用浏览器的内置HTML转义功能来处理许多情况。为此,只需在DOM树中创建一个元素并将innerText
该元素的设置为您的字符串。然后检索innerHTML
的元素。浏览器将返回HTML编码的字符串。
function HtmlEncode(s)
{
var el = document.createElement("div");
el.innerText = el.textContent = s;
s = el.innerHTML;
return s;
}
测试运行:
alert(HtmlEncode('&;\'><"'));
输出:
&;'><"
Prototype JS库也使用这种转义HTML的方法,尽管与我给出的简单示例有所不同。
注意:您仍然需要自己对引号(双引号和单引号)进行转义。您可以在此处使用其他人概述的任何方法。
delete el
是一个错误。perfectionkills.com/understanding-delete
<>&
但是不像Neotropic或KooiInc的解决方案那样全面。
output = $('<div>').text(input).html()
此泛型函数将每个非字母字符编码为其htmlcode(数字):
function HTMLEncode(str) {
var i = str.length,
aRet = [];
while (i--) {
var iC = str[i].charCodeAt();
if (iC < 65 || iC > 127 || (iC>90 && iC<97)) {
aRet[i] = '&#'+iC+';';
} else {
aRet[i] = str[i];
}
}
return aRet.join('');
}
<>&
var iC = str.charCodeAt(i)
从Mozilla ...
请注意,charCodeAt将始终返回小于65,536的值。这是因为较高的代码点由一对(较低值的)“替代”伪字符表示,这些伪字符用于构成实字符。因此,为了检查或重现值大于等于65,536的单个字符的完整字符,对于此类字符,不仅要检索charCodeAt(i),而且还要检索charCodeAt(i + 1)(就像检查/生成带有两个>字母的字符串)。
最好的解决方案
/**
* (c) 2012 Steven Levithan <http://slevithan.com/>
* MIT license
*/
if (!String.prototype.codePointAt) {
String.prototype.codePointAt = function (pos) {
pos = isNaN(pos) ? 0 : pos;
var str = String(this),
code = str.charCodeAt(pos),
next = str.charCodeAt(pos + 1);
// If a surrogate pair
if (0xD800 <= code && code <= 0xDBFF && 0xDC00 <= next && next <= 0xDFFF) {
return ((code - 0xD800) * 0x400) + (next - 0xDC00) + 0x10000;
}
return code;
};
}
/**
* Encodes special html characters
* @param string
* @return {*}
*/
function html_encode(string) {
var ret_val = '';
for (var i = 0; i < string.length; i++) {
if (string.codePointAt(i) > 127) {
ret_val += '&#' + string.codePointAt(i) + ';';
} else {
ret_val += string.charAt(i);
}
}
return ret_val;
}
用法示例:
html_encode("✈");
创建一个使用字符串的函数 replace
function convert(str)
{
str = str.replace(/&/g, "&");
str = str.replace(/>/g, ">");
str = str.replace(/</g, "<");
str = str.replace(/"/g, """);
str = str.replace(/'/g, "'");
return str;
}
对于那些想要像字符串内部那样解码整数字符代码的人&#xxx;
,请使用以下函数:
function decodeHtmlCharCodes(str) {
return str.replace(/(&#(\d+);)/g, function(match, capture, charCode) {
return String.fromCharCode(charCode);
});
}
// Will output "The show that gained int’l reputation’!"
console.log(decodeHtmlCharCodes('The show that gained int’l reputation’!'));
const decodeHtmlCharCodes = str =>
str.replace(/(&#(\d+);)/g, (match, capture, charCode) =>
String.fromCharCode(charCode));
// Will output "The show that gained int’l reputation’!"
console.log(decodeHtmlCharCodes('The show that gained int’l reputation’!'));
function char_convert() {
var chars = ["©","Û","®","ž","Ü","Ÿ","Ý","$","Þ","%","¡","ß","¢","à","£","á","À","¤","â","Á","¥","ã","Â","¦","ä","Ã","§","å","Ä","¨","æ","Å","©","ç","Æ","ª","è","Ç","«","é","È","¬","ê","É","","ë","Ê","®","ì","Ë","¯","í","Ì","°","î","Í","±","ï","Î","²","ð","Ï","³","ñ","Ð","´","ò","Ñ","µ","ó","Õ","¶","ô","Ö","·","õ","Ø","¸","ö","Ù","¹","÷","Ú","º","ø","Û","»","ù","Ü","@","¼","ú","Ý","½","û","Þ","€","¾","ü","ß","¿","ý","à","‚","À","þ","á","ƒ","Á","ÿ","å","„","Â","æ","…","Ã","ç","†","Ä","è","‡","Å","é","ˆ","Æ","ê","‰","Ç","ë","Š","È","ì","‹","É","í","Œ","Ê","î","Ë","ï","Ž","Ì","ð","Í","ñ","Î","ò","‘","Ï","ó","’","Ð","ô","“","Ñ","õ","”","Ò","ö","•","Ó","ø","–","Ô","ù","—","Õ","ú","˜","Ö","û","™","×","ý","š","Ø","þ","›","Ù","ÿ","œ","Ú"];
var codes = ["©","Û","®","ž","Ü","Ÿ","Ý","$","Þ","%","¡","ß","¢","à","£","á","À","¤","â","Á","¥","ã","Â","¦","ä","Ã","§","å","Ä","¨","æ","Å","©","ç","Æ","ª","è","Ç","«","é","È","¬","ê","É","­","ë","Ê","®","ì","Ë","¯","í","Ì","°","î","Í","±","ï","Î","²","ð","Ï","³","ñ","Ð","´","ò","Ñ","µ","ó","Õ","¶","ô","Ö","·","õ","Ø","¸","ö","Ù","¹","÷","Ú","º","ø","Û","»","ù","Ü","@","¼","ú","Ý","½","û","Þ","€","¾","ü","ß","¿","ý","à","‚","À","þ","á","ƒ","Á","ÿ","å","„","Â","æ","…","Ã","ç","†","Ä","è","‡","Å","é","ˆ","Æ","ê","‰","Ç","ë","Š","È","ì","‹","É","í","Œ","Ê","î","Ë","ï","Ž","Ì","ð","Í","ñ","Î","ò","‘","Ï","ó","’","Ð","ô","“","Ñ","õ","”","Ò","ö","•","Ó","ø","–","Ô","ù","—","Õ","ú","˜","Ö","û","™","×","ý","š","Ø","þ","›","Ù","ÿ","œ","Ú"];
for(x=0; x<chars.length; x++){
for (i=0; i<arguments.length; i++){
arguments[i].value = arguments[i].value.replace(chars[x], codes[x]);
}
}
}
char_convert(this);
正如dragon
最干净的方法提到的是jQuery
:
function HtmlEncode(s) {
return $('<div>').text(s).html();
}
function HtmlDecode(s) {
return $('<div>').html(s).text();
}
函数ConvChar(str){ c = {'<':'&lt;','>':'&gt;','&':'&amp;','“':'”“,”'“:'&#039;', '#':'&#035;' }; 返回str.replace(/ [<&>'“#] / g,函数(return c [s];}); } alert(ConvChar('<-“-&-”->-<-\'-#-\'->'));
结果:
&lt;-&gt;-&amp;-&gt;-&lt;-&#039;-&#035;-&#039;-&gt;
在testarea标签中:
<-“-&-”->-<-'-#-'->
如果您只是在长代码中更改一些字符,...
在PRE
标记以及大多数其他HTML标记中,使用输出重定向字符(<和>)的批处理文件的纯文本将破坏HTML,但这是我的提示:TEXTAREA
元素中包含所有内容-不会破坏HTML,主要是因为我们位于由OS实例化和处理的控件内,因此HTML引擎未解析其内容。
例如,假设我要使用JavaScript突出显示批处理文件的语法。我只是简单地将代码粘贴到文本区域中,而不必担心HTML保留字符,并让脚本处理innerHTML
textarea 的属性,该属性的结果是文本被HTML保留字符替换为相应的ISO-8859-1实体。
当您检索元素的innerHTML
(和outerHTML
)属性时,浏览器将自动转义特殊字符。使用textarea(谁知道,也许是类型的文本输入)只会使您免于进行转换(手动或通过代码)。
我使用此技巧来测试语法荧光笔,当完成创作和测试后,我只是从视图中隐藏了文本区域。
var swapCodes = new Array(8211, 8212, 8216, 8217, 8220, 8221, 8226, 8230, 8482, 169, 61558, 8226, 61607);
var swapStrings = new Array("--", "--", "'", "'", '"', '"', "*", "...", "™", "©", "•", "•", "•");
var TextCheck = {
doCWBind:function(div){
$(div).bind({
bind:function(){
TextCheck.cleanWord(div);
},
focus:function(){
TextCheck.cleanWord(div);
},
paste:function(){
TextCheck.cleanWord(div);
}
});
},
cleanWord:function(div){
var output = $(div).val();
for (i = 0; i < swapCodes.length; i++) {
var swapper = new RegExp("\\u" + swapCodes[i].toString(16), "g");
output = output.replace(swapper, swapStrings[i]);
}
$(div).val(output);
}
}
我们现在使用的另一个可行。上面我有一个调用脚本,并返回转换后的代码。仅适用于小文本区域(表示文章/博客等内容不完整...)
对于以上。适用于大多数字符。
var swapCodes = new Array(8211, 8212, 8216, 8217, 8220, 8221, 8226, 8230, 8482, 61558, 8226, 61607,161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 338, 339, 352, 353, 376, 402);
var swapStrings = new Array("--", "--", "'", "'", '"', '"', "*", "...", "™", "•", "•", "•", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "­", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ", "Œ", "œ", "Š", "š", "Ÿ", "ƒ");
我创建了一个JavaScript文件,该文件具有很多功能,包括上述功能。 http://www.neotropicsolutions.com/JSChars.zip
包括所有需要的文件。我添加了jQuery 1.4.4。仅仅是因为我看到了其他版本的问题,但尚未尝试。
Requires: jQuery & jQuery Impromptu from: http://trentrichardson.com/Impromptu/index.php
1. Word Count
2. Character Conversion
3. Checks to ensure this is not passed: "notsomeverylongstringmissingspaces"
4. Checks to make sure ALL IS NOT ALL UPPERCASE.
5. Strip HTML
// Word Counter
$.getScript('js/characters.js',function(){
$('#adtxt').bind("keyup click blur focus change paste",
function(event){
TextCheck.wordCount(30, "#adtxt", "#adtxt_count", event);
});
$('#adtxt').blur(
function(event){
TextCheck.check_length('#adtxt'); // unsures properly spaces-not one long word
TextCheck.doCWBind('#adtxt');// char conversion
});
TextCheck.wordCount(30, "#adtxt", "#adtxt_count", false);
});
//HTML
<textarea name="adtxt" id="adtxt" rows="10" cols="70" class="wordCount"></textarea>
<div id="adtxt_count" class="clear"></div>
// Just Character Conversions:
TextCheck.doCWBind('#myfield');
// Run through form fields in a form for case checking.
// Alerts user when field is blur'd.
var labels = new Array("Brief Description","Website URL","Contact Name","Website","Email","Linkback URL");
var checking = new Array("descr","title","fname","website","email","linkback");
TextCheck.check_it(checking,labels);
// Extra security to check again, make sure form is not submitted
var pass = TextCheck.validate(checking,labels);
if(pass){
//do form actions
}
//Strip HTML
<textarea name="adtxt" id="adtxt" rows="10" cols="70" onblur="TextCheck.stripHTML(this);"></textarea>
我发现这是一个很好的库,在这种情况下非常有用。
https://github.com/mathiasbynens/he
根据其作者:
它支持HTML格式的所有标准化命名字符引用,就像浏览器一样处理歧义的“&”号和其他边缘情况,具有广泛的测试套件,并且-与许多其他JavaScript解决方案相反-他可以很好地处理星形Unicode符号
这是我不需要Jquery使用的几种方法:
您可以编码字符串中的每个字符:
function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}
或只针对主要的安全编码字符担心(&,inebreaks,<,>,“和'),例如:
function encode(r){
return r.replace(/[\x26\x0A\<>'"]/g,function(r){return"&#"+r.charCodeAt(0)+";"})
}
test.value=encode('How to encode\nonly html tags &<>\'" nice & fast!');
/*************
* \x26 is &ersand (it has to be first),
* \x0A is newline,
*************/
<textarea id=test rows="9" cols="55">www.WHAK.com</textarea>
<html>
<body>
<script type="text/javascript">
var str= "&\"'<>";
alert('B4 Change:\n' + str);
str= str.replace(/\&/g,'&');
str= str.replace(/</g,'<');
str= str.replace(/>/g,'>');
str= str.replace(/\"/g,'"');
str= str.replace(/\'/g,''');
alert('After change:\n' + str);
</script>
</body>
</html>
使用它来测试:http : //www.w3schools.com/js/tryit.asp?filename=tryjs_text
参见JavaScript htmlentities http://phpjs.org/functions/htmlentities:425