Hướng dẫn javascript crlf - javascript crlf

Làm cách nào để thay thế chuỗi ASCII 13 ASCII 10 - (cr lf Dash hoặc /r /n-) trong văn bản bên trong phần tử TD trong một trang web bằng JavaScript hoặc JQuery? Có những câu hỏi tương tự về điều này trong StackOverflow và các nơi khác, nhưng các giải pháp được liệt kê không hoạt động trên kịch bản cụ thể này. HTML đến được tạo động bởi một phần mềm di sản của khách hàng sẽ không được thay đổi, nhưng nó tham chiếu một tệp JavaScript mà tôi có thể thay đổi. Một phiên bản rút ngắn của trang được đưa ra dưới đây. Trang thực tế chứa giữa 0 đến hai mươi hàng dữ liệu, một số trong đó chứa nhiều dòng. Người dùng của tôi đang trên Internet Explorer 8 và cả hai dòng dưới đây đều không hoạt động. Tôi đã thử chỉ thay thế trở lại vận chuyển và chỉ thay thế nguồn cấp dữ liệu. Tôi đã thử điều này từ JavaScript và JQuery mà không có bất kỳ hiệu ứng có thể nhìn thấy nào. Khi tôi lưu trang từ Internet Explorer 8 và xem nó trong một trình soạn thảo hex, các ký tự nguồn cấp dữ liệu và đường dẫn vận chuyển có mặt trong máy khách. Mấu chốt của vấn đề là hiển thị /n trong văn bản với JavaScript.

Tôi muốn thực hiện thay thế này vì tôi muốn hai dòng văn bản xuất hiện trong đầu ra được hiển thị bất cứ khi nào chuỗi /r /n- tồn tại trong trang trong một phần tử.

Lưu ý rằng tôi đã bao gồm hai phiên bản thay thế, một jQuery và một javascript. Không phải những gì tôi muốn nó làm.

   
    
    Page Testing 
    
    
    
    
    
-First Content -Second Line of Content -How I want it to look
-After the transformation

Hướng dẫn javascript crlf - javascript crlf

Vyegorov

20,8K7 Huy hiệu vàng57 Huy hiệu bạc72 Huy hiệu đồng7 gold badges57 silver badges72 bronze badges

Khi được hỏi ngày 9 tháng 5 năm 2012 lúc 15:45May 9, 2012 at 15:45

Câu hỏi của bạn nói rằng bạn chỉ quan tâm đến việc hiển thị chúng trên các dòng riêng biệt, không cụ thể về việc thay thế \ r \ n.

Bạn có thể xem xét CSS để giải quyết vấn đề này.


Xem cách các giá trị không gian trắng khác nhau hoạt động.

Đã trả lời ngày 9 tháng 5 năm 2012 lúc 23:28May 9, 2012 at 23:28

1

Điều này làm việc cho trường hợp cụ thể của bạn:

$this.html($this.html().replace(/\s+\-/g, "
-"));

Thay vì tìm kiếm các ký tự CRLF, nó sẽ lấy bất kỳ khoảng trắng nào theo sau là một dấu gạch ngang. Nếu có dấu gạch ngang trong nội dung của bạn theo không gian, họ cũng sẽ có thêm thẻ BR.

Có một số hành vi kỳ lạ với IE 8 cho Newlines. Nếu tôi nhận được một lời giải thích, tôi sẽ cập nhật điều này.

Đã trả lời ngày 9 tháng 5 năm 2012 lúc 18:56May 9, 2012 at 18:56

Hellslamhellslamhellslam

1.53011 Huy hiệu bạc17 Huy hiệu đồng11 silver badges17 bronze badges

2

Bạn chỉ thay thế \ n-, nhưng bạn đã nói rằng chuỗi ký tự bạn đang cố gắng thay thế là \ r \ n-

Hãy thử đặt \ r vào các biểu thức thay thế của bạn.

Các ký tự \ r, mặc dù không phải là Windows/Linux mới được hỗ trợ thông thường, thường sẽ vẫn hiển thị dưới dạng dòng mới trong trình duyệt/người xem nguồn mà cố gắng phục vụ mọi người.

Đã trả lời ngày 9 tháng 5 năm 2012 lúc 15:52May 9, 2012 at 15:52

1

Bạn có thể thử

$this.html().replace(/[\n\r]+\-/g, "
-")

trong đó thay thế cả hai ký tự trở lại mới và vận chuyển.

Đã trả lời ngày 9 tháng 5 năm 2012 lúc 15:48May 9, 2012 at 15:48

Radiospielradiospielradiospiel

2.41020 Huy hiệu bạc27 Huy hiệu đồng20 silver badges27 bronze badges

3

Các mã ASCII tương ứng 13 (CR) và 10 (lf) được biểu thị là \ r và \ n. Chúng cách nhau hai dòng, nhưng hệ điều hành sử dụng chúng khác nhau. Cả hai đều khác nhau.

Một chuỗi hai ký tự được sử dụng để bắt đầu một dòng mới trên Windows, theo sau là LF, Cr. Mặt khác, chỉ có LF được sử dụng trên các nền tảng giống như UNIX.Show

  • Chúng ta cần nhận thức được các ký tự phá vỡ dòng mà chúng ta sử dụng trong khi tạo các chương trình Java, vì các ứng dụng sẽ tương thích với hệ điều hành.
  • Một dòng đầu ra bảng điều khiển mới sẽ được thêm
  • Làm cách nào để thêm một dòng chuỗi mới?
  • Dòng đầu ra DOM mới được thêm vào
  • Example 
  • Conclusion 
  • Có nghĩa là gì khi trở về vận chuyển?
  • \ R Trở lại vận chuyển trong Java là gì?
  • \ R có nghĩa là gì trong html?
  • Khóa trả về vận chuyển là gì?

Tôi muốn đưa ra một giải pháp khác, cố gắng giải quyết câu hỏi thực sự nên được hỏi ở đây:

"Làm thế nào để chèn văn bản không tin cậy vào một phần tử DOM?"

Nếu bạn tin tưởng văn bản, tại sao không sử dụng Internhtml?

domElement.innerHTML = trustedText.replace(/\r/g, '').replace(/\n/g, '
');

nên đủ cho tất cả các trường hợp hợp lý.

Nếu bạn quyết định bạn nên sử dụng .TextContent thay vì .innerhtml, điều đó có nghĩa là bạn không tin vào văn bản mà bạn sắp chèn, phải không? Đây là một mối quan tâm hợp lý.

Ví dụ: bạn có một biểu mẫu mà người dùng có thể tạo một bài đăng và sau khi đăng nó, văn bản bài đăng được lưu trữ trong cơ sở dữ liệu của bạn và sau đó được thêm vào các trang bất cứ khi nào người dùng khác truy cập trang có liên quan.

Nếu bạn sử dụng InnerHTML ở đây, bạn sẽ có một vi phạm bảo mật. tức là, người dùng có thể đăng một cái gì đó như

[script]alert(1);[/script]

.

Điều này sẽ không kích hoạt một cảnh báo nếu bạn sử dụng InternalHTML, nhưng nó sẽ cho bạn ý tưởng tại sao việc sử dụng bên trong có thể có vấn đề. Một người dùng thông minh hơn sẽ đăng

[img src="invalid_src" onerror="alert(1)"]

sẽ kích hoạt cảnh báo cho mọi người dùng khác truy cập trang. Bây giờ chúng tôi có một vấn đề. Một người dùng thậm chí thông minh hơn sẽ đặt hiển thị: không có kiểu IMG đó và làm cho nó đăng cookie của người dùng hiện tại lên một trang web miền chéo. Xin chúc mừng, tất cả các chi tiết đăng nhập người dùng của bạn hiện được phơi bày trên Internet.

Vì vậy, điều quan trọng cần hiểu là, sử dụng Internhtml không sai, thật hoàn hảo nếu bạn chỉ sử dụng nó để xây dựng các mẫu chỉ sử dụng mã nhà phát triển đáng tin cậy của riêng bạn. Câu hỏi thực sự nên là "làm cách nào để nối thêm văn bản người dùng không đáng tin cậy có dòng mới vào tài liệu HTML của tôi".

Điều này đặt ra một câu hỏi: chúng ta sử dụng chiến lược nào cho Newlines? Chúng ta có sử dụng các yếu tố [BR] không? [p] s hoặc [div] s?

Đây là một chức năng ngắn giải quyết vấn đề:

function insertUntrustedText(domElement, untrustedText, newlineStrategy) {
    domElement.innerHTML = '';
    var lines = untrustedText.replace(/\r/g, '').split('\n');
    var linesLength = lines.length;
    if(newlineStrategy === 'br') {
        for(var i = 0; i < linesLength; i++) {
            domElement.appendChild(document.createTextNode(lines[i]));
            domElement.appendChild(document.createElement('br'));
        }
    }
    else {
        for(var i = 0; i < linesLength; i++) {
            var lineElement = document.createElement(newlineStrategy);
            lineElement.textContent = lines[i];
            domElement.appendChild(lineElement);
        }
    }
}

Về cơ bản, bạn có thể ném cái này ở đâu đó trong tệp Common_Functions.js của mình và sau đó chỉ cần bắn và quên bất cứ khi nào bạn cần nối thêm bất kỳ người dùng/API/etc-> văn bản không được tin tưởng (tức là không được viết bởi nhóm phát triển của bạn) Trang HTML của bạn.

Ví dụ sử dụng:

insertUntrustedText(document.querySelector('.myTextParent'), 'line1\nline2\r\nline3', 'br');

Tham số newlineStargety chỉ chấp nhận các thẻ phần tử DOM hợp lệ, vì vậy nếu bạn muốn [br] newlines, hãy vượt qua 'br', nếu bạn muốn mỗi dòng trong một phần tử [p], hãy vượt qua 'p', v.v.

Ngôn ngữ lập trình Java được định hướng đối tượng và cung cấp các ứng dụng cho một số nền tảng. Mã được biên dịch của dòng mới JavaScript được viết trên hầu hết các nền tảng HĐH (bytecode), bao gồm Windows, Linux và Mac OS, khi một lập trình viên phát triển ứng dụng Java. Java kế thừa một phần lớn của cú pháp C và C ++ của nó.

Vào giữa những năm 1990, Java được tạo ra với sự hợp tác của Mike Sheridan và Patrick Naughton của James A. Gosling, một cựu nhà khoa học máy tính của Sun Microsystems.

Thêm một dòng mới trong JavaScript

Tùy thuộc vào kết quả đạt được, có hai cách tiếp cận để thêm một dòng mới vào JavaScript. Bài học này cho thấy làm thế nào cả bảng điều khiển JavaScript và DOM có thể được thêm vào dòng mới.

Một dòng đầu ra bảng điều khiển mới sẽ được thêm

Nếu bạn muốn thêm một dòng mới vào bảng điều khiển dòng mới & nbsp; JavaScript trong khi in một vài từ, có thể sử dụng dấu hiệu \ n cho dòng mới.

Thao tác chuỗi dòng mới của JavaScript là một trong những điều dễ học, nhưng khó thành thạo. Một khi bạn tin rằng bạn đã nắm bắt được nó, một thay đổi ngữ cảnh có thể gây sốc những gì bạn đã học được cho đến thời điểm đó.

Nếu bạn gặp khó khăn khi thêm một dòng mới vào một chuỗi, hãy đọc tiếp.

Làm cách nào để thêm một dòng chuỗi mới?

Nhân vật Newline là \ n trong JavaScript và nhiều ngôn ngữ khác. Tất cả những gì bạn cần làm là thêm ký tự \ n bất cứ khi nào bạn yêu cầu ngắt dòng để thêm một dòng mới vào một chuỗi.

Example:

Đặt str = "Xin chào thế giới! \ nthis là chuỗi của tôi";

console.log(str);

Đầu ra

Hướng dẫn javascript crlf - javascript crlf

Dòng đầu ra DOM mới được thêm vào

Bạn phải thay đổi DOM và thêm phần tử HTML để hiển thị văn bản bên dưới, khi bạn phải tạo dòng mới cho một trang web.

Phá vỡ dòng khác nhau giữa các nền tảng trong chuỗi, mặc dù các nền tảng thường xuyên nhất là:

  • Windows: Mang lại trở lại \ r \ n theo sau là một ký tự trên dòng mới.
  • Linux: \ n một ký tự trên một dòng mới.
  • Mac cũ hơn: Một nhân vật được trả lại bởi một cỗ xe.

Nhiệm vụ dòng mới của JavaScript này được thực hiện bằng hai phương thức. Một phương pháp là truy cập từng ký tự một bằng cách sử dụng mạch lập trình thông thường. Một cái khác sử dụng các cụm từ thông thường.

Phương pháp khâu: Đây là kỹ thuật cơ bản để giải quyết vấn đề này. Kiểm tra từng ký tự chuỗi và cắt nó để loại bỏ các ký tự khỏi đường mới và vận chuyển trở lại.

Đầu dòng (EOL), ngắt dòng, nguồn cấp dữ liệu dòng, ngắt đường hoặc ký tự trả về vận chuyển là một ký tự điều khiển, là phần cuối của một dòng văn bản và ký tự sau nên bắt đầu theo một dòng khác. Đó là \ r \ n trên hệ thống Windows và đó là Linux trên \ n.

Chúng tôi có thể sử dụng System.LineSeparator () trong Java để có được ký tự dòng mới tùy thuộc vào nền tảng.

Các mã ASCII tương ứng 13 (CR) và 10 (lf) được biểu thị là \ r và \ n. Chúng cách nhau hai dòng, nhưng hệ điều hành sử dụng chúng khác nhau. Cả hai đều khác nhau.

Một chuỗi hai ký tự được sử dụng để bắt đầu một dòng mới trên Windows, theo sau là LF, Cr. Mặt khác, chỉ có LF được sử dụng trên các nền tảng giống như UNIX.

Chúng ta cần nhận thức được các ký tự phá vỡ dòng mà chúng ta sử dụng trong khi tạo các chương trình Java, vì các ứng dụng sẽ tương thích với hệ điều hành.

System.LineSeparator là lựa chọn an toàn và tương thích nhất (). Trong phương pháp này, chúng tôi không cần phải xem xét hệ điều hành.

Example 

lớp công khai endlinecharactermain {

& nbsp;

    {

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; //

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

        System.out.println(str1);

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; // nên được sử dụng trong Windows

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

        System.out.println(str2);

    }

        System.out.println(str1);

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; // nên được sử dụng trong Windows

Hướng dẫn javascript crlf - javascript crlf

}

Conclusion 

Đầu ra

Dòng đầu ra DOM mới được thêm vào

Bạn phải thay đổi DOM và thêm phần tử HTML để hiển thị văn bản bên dưới, khi bạn phải tạo dòng mới cho một trang web.a control character or mechanism used to reset a device's position to the beginning of a line of text.

Có nghĩa là gì khi trở về vận chuyển?

Trở lại vận chuyển, đôi khi được gọi là Hộp mực trở lại và thường được rút ngắn thành CR, hoặc trả lại, là một đặc tính hoặc cơ chế điều khiển được sử dụng để đặt lại vị trí của thiết bị về đầu của một dòng văn bản.a control character or mechanism used to reset a device's position to the beginning of a line of text.moves the cursor to the beginning of the line. '\n'(line feed) moves the cursor to the next line . On windows both are combined as \r\n to indicate an end of line (ie, move the cursor to the beginning of the next line).

\ R Trở lại vận chuyển trong Java là gì?

'\ r' là đại diện của nhân vật đặc biệt Cr (trả về vận chuyển), nó di chuyển con trỏ sang đầu dòng.'\ n' (nguồn cấp dữ liệu) di chuyển con trỏ sang dòng tiếp theo.Trên Windows, cả hai đều được kết hợp dưới dạng \ r \ n để chỉ ra một kết thúc của dòng (tức là, di chuyển con trỏ sang đầu của dòng tiếp theo).moves the cursor to the beginning of the line. '\n'(line feed) moves the cursor to the next line . On windows both are combined as \r\n to indicate an end of line (ie, move the cursor to the beginning of the next line).carriage return characters.

\ R có nghĩa là gì trong html?

Các metacharacter \ r phù hợp với các ký tự vận chuyển.carriage return characters."enter" or "return" key on a keyboard when creating text. The said result is a creation of a new line of text. The term carriage return came from the actual carriage mechanism inside a typewriter.