在textarea中的换行要转化成html编码,把里面的换行转化成<br/>或<p></p>标签。“\n”是<br/>也就是当前行换行;“\r\n\r\n”或者“\n\n”视作<p></p>,即是段落换行,这里处理的只要连着两个当前行换行就为段落换行,也就是说两个<br/><br/>连着我们这里处理为段落换行用<p></p>包装。

这里我们需要遵照html标签规则来处理,段落换行里面可以包含当前行换行,而当前行换行是不能包含段落换行的,html元素<p></p>标签里面可以包含<br/>标签,反向就不能。那么这里我们脚本处理的时候也要遵守这个规则,先处理段落换行然后再处理当前行换行,先处理当前行换行后面所有的段落换行都会视作当前行的换行无法解析。

<script language="javascript" type="text/javascript">
    //遗昕 | weisim3.com 12.07.2014
        function HTMLEnCode(str) {
            var s = "";
            if (str.length == 0) return "";
            s = str.replace(/&/g, ">");
            s = s.replace(/</g, "<");
            s = s.replace(/>/g, ">");
            s = s.replace(/    /g, " ");
            s = s.replace(/\'/g, "");
            s = s.replace(/\"/g, "&quot;");
            s = s.replace(/\r\n\r\n/g, "</p><p>")
            s = s.replace(/\n\n/g, "</p><p>");
            s = s.replace(/\n/g, "<br>");
            return s;
        }
        function HTMLDeCode(str) {
            var s = "";
            if (str.length == 0) return "";
            s = str.replace(/>/g, "&");
            s = s.replace(/</g, "<");
            s = s.replace(/>/g, ">");
            s = s.replace(/ /g, "    ");
            s = s.replace(/'/g, "\'");
            s = s.replace(/&quot;/g, "\"");
            s = s.replace(/<\/p><p>/g, "\r\n\r\n");
            s = s.replace(/<\/p><p>/g, "\n\n");
            s = s.replace(/<br>/g, "\n");
            return s;
        }


        // <![CDATA[

        function Button1_onclick() {
            view.innerHTML = HTMLEnCode(TextArea1.value);
        }

        // ]]>
    </script>