Giải mã các ký tự đặc biệt trong html javascript

The following function decodes named and numeric HTML entities and works on UTF-8. Requires iconv.

function decodeHtmlEnt($str) {
    $ret = html_entity_decode($str, ENT_COMPAT, 'UTF-8');
    $p2 = -1;
    for(;;) {
        $p = strpos($ret, '&#', $p2+1);
        if ($p === FALSE)
            break;
        $p2 = strpos($ret, ';', $p);
        if ($p2 === FALSE)
            break;

        if (substr($ret, $p+2, 1) == 'x')
            $char = hexdec(substr($ret, $p+3, $p2-$p-3));
        else
            $char = intval(substr($ret, $p+2, $p2-$p-2));

        //echo "$char\n";
        $newchar = iconv(
            'UCS-4', 'UTF-8',
            chr(($char>>24)&0xFF).chr(($char>>16)&0xFF).chr(($char>>8)&0xFF).chr($char&0xFF)
        );
        //echo "$newchar<$p<$p2<<\n";
        $ret = substr_replace($ret, $newchar, $p, 1+$p2-$p);
        $p2 = $p + strlen($newchar);
    }
    return $ret;
}

Html không hợp lệ, đánh dấu bị hỏng và các tác dụng phụ không mong muốn khác khi làm việc với chuỗi html mà không được thoát đúng cách trong Javascript, là vấn đề mà ít nhất 1 trong số 5 nhà phát triển web (làm việc với các ứng dụng động) gặp phải

Bản thân Javascript không cung cấp các phương thức riêng để xử lý nó, không giống như PHP (ngôn ngữ phía máy chủ tuyệt đẹp của chúng tôi) cung cấp các hàm htmlentities, html_entity_decodehtml_entity_encode sẵn sàng để sử dụng

Mã hóa và giải mã mọi thứ

Nếu bạn là một trong những nhà phát triển tâm thần (giống như tôi) không thích thêm phần lớn mã vào dự án của họ, bạn có thể muốn sử dụng đoạn mã sau

Đoạn mã này hoạt động như một lá bùa theo cả hai cách, mã hóa và giải mã. Nó mong đợi là tham số đầu tiên của chuỗi (được giải mã hoặc mã hóa theo phương thức) và trả về chuỗi đã xử lý

Nó không cung cấp quá nhiều tùy chỉnh nhưng nó hoạt động tốt (ít hơn chỉ có một vài dòng). Lưu ý rằng phương thức mã hóa, sẽ chuyển đổi mọi ký tự thành ký tự html của nó

If you want to replace only those weird characters that broke your html (<,>,/,\ etc) keep reading and don't use this method, otherwise this snippet comes in handy.

(function(window){
	window.htmlentities = {
		/**
		 * Converts a string to its html characters completely.
		 *
		 * @param {String} str String with unescaped HTML characters
		 **/
		encode : function(str) {
			var buf = [];
			
			for (var i=str.length-1;i>=0;i--) {
				buf.unshift(['&#', str[i].charCodeAt(), ';'].join(''));
			}
			
			return buf.join('');
		},
		/**
		 * Converts an html characterSet into its original character.
		 *
		 * @param {String} str htmlSet entities
		 **/
		decode : function(str) {
			return str.replace(/&#(\d+);/g, function(match, dec) {
				return String.fromCharCode(dec);
			});
		}
	};
})(window);

Đoạn mã trước tạo một biến toàn cục (trong cửa sổ) có tên là htmlentities. Đối tượng này chứa 2 phương thức mã hóa và giải mã

Để chuyển đổi một chuỗi bình thường thành các ký tự html của nó, hãy sử dụng phương thức mã hóa

htmlentities.encode("Hello, this is a test stríng > < with characters that could break html. Therefore we convert it to its html characters.");
// Output
"Hello, this is a test stríng > < with characters that could break html. Therefore we convert it to its html characters."

Để chuyển đổi một chuỗi html được mã hóa thành các ký tự có thể đọc được, hãy sử dụng phương thức giải mã

htmlentities.decode("Hello, this is a test stríng > < with characters that could break html. Therefore we convert it to its html characters.");
// Output
"Hello, this is a test stríng > < with characters that could break html. Therefore we convert it to its html characters."

Ghi chú. vui lòng sao chép mọi chức năng đơn lẻ và đưa nó vào dự án của bạn theo ý muốn

Sử dụng thư viện

Là một nhiệm vụ không dễ đạt được, có một thư viện tuyệt vời sẽ giải quyết vấn đề này cho bạn

Anh ấy. js  (đối với “thực thể HTML”) là bộ mã hóa/giải mã thực thể HTML mạnh mẽ được viết bằng JavaScript. Nó hỗ trợ , xử lý các dấu và không rõ ràng và các trường hợp cạnh khác , có nhiều . he handles astral Unicode symbols just fine. Có bản demo trực tuyến.

mã hóa

Hàm này lấy một chuỗi HTML và giải mã bất kỳ tham chiếu ký tự số và tên nào trong đó bằng cách sử dụng

Làm cách nào để giải mã giá trị HTML trong JavaScript?

Giải mã thực thể HTML với phần tử DOM