html隐藏文本时没有空白,将纯文本呈现为HTML,保留空白–无<pre>

使用zero-width space(​)保留空白并允许文本换行。基本思想是将每个空间或空间序列与零宽度空间配对。然后用一个不间断的空格替换每个空格。您还需要对html进行编码并添加换行符。

如果你不在乎unicode字符,那就很简单了。您可以使用string.replace():function textToHTML(text)

{

return ((text || "") + "") // make sure it is a string;

.replace(/&/g, "&")

.replace(/

.replace(/>/g, ">")

.replace(/\t/g, " ")

.replace(/ /g, "​ ​")

.replace(/\r\n|\r|\n/g, "
");

}

如果空白可以换行,则将每个空白与上面的零宽度空白配对。否则,为了使空白保持在一起,将每个序列的空格与一个零宽度的空格配对:.replace(/ /g, " ")

.replace(/(( )+)/g, "​$1​")

要编码unicode字符,它要复杂一些。您需要迭代字符串:var charEncodings = {

"\t": "    ",

" ": " ",

"&": "&",

"

">": ">",

"\n": "
",

"\r": "
"

};

var space = /[\t ]/;

var noWidthSpace = "​";

function textToHTML(text)

{

text = (text || "") + ""; // make sure it is a string;

text = text.replace(/\r\n/g, "\n"); // avoid adding two
tags

var html = "";

var lastChar = "";

for (var i in text)

{

var char = text[i];

var charCode = text.charCodeAt(i);

if (space.test(char) && !space.test(lastChar) && space.test(text[i + 1] || ""))

{

html += noWidthSpace;

}

html += char in charEncodings ? charEncodings[char] :

charCode > 127 ? "" + charCode + ";" : char;

lastChar = char;

}

return html;

}

现在,只是一个评论。如果不使用monospace字体,就会丢失一些格式。考虑一下这些带有单空格字体的文本行如何构成列:ten seven spaces

eleven four spaces

如果没有等宽字体,将丢失列:

十个七格

十一个四格

看来修复这个问题的算法非常复杂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值