html 이스케이프 처리
test
이 코드를 텍스트로 페이지에 그대로 출력하려면 정상적인 방식대로 하면 분명히 의미가 바뀌고 페이지에서text만 볼 수 있다.그렇다면 예상한 효과를 내려면 어떻게 해야 할까?html 라벨을 공부할 때 코드를 그대로 출력하려면 라벨
pre
+code
로 처리할 수 있음을 알 수 있다.그러나 이런 방식은 처리할 수 없다:html 라벨.1.
vue
프레임워크를 통해 다음과 같은 이점을 얻을 수 있습니다.
export default {
data () {
return {
html: '<span>test</span>'
}
}
}
2.
react
프레임워크를 통해 다음과 같은 이점을 얻을 수 있습니다.import React, { PureComponent } from 'react'
class Test extends PureComponent {
constructor (props) {
super(props)
this.state = {
html: 'test'
}
}
render () {
const { content } = this.state
return (
)
}
}
3. html 태그 하나로 실현하려면 가능한가요?답은 가능하며
xmp
라벨을 사용할 수 있습니다.이 탭의 역할: 내용을 문자열로 출력합니다.test
그러나 이 탭은 W3C에서 폐기되었지만, 대형 브라우저들은 여전히 이 탭을 지원합니다.왜 폐기되었을까?폐기된 데는 틀림없이 폐기된 이유가 있을 것이다.만약 이 라벨을 반드시 사용해야 한다면 주의해야 한다.
4. 라벨이나 프레임의 능력을 빌리지 않고 어떻게 스스로 실현할 수 있을까?
// html
function htmlEncode (text) {
var isHtml = /[\x00`>": ">",
"\x00": "",
"'": "'",
'"': """,
"`": "`"
};
return charEntities[ch] || (charEntities[ch] = "" + ch.charCodeAt(0) + ";");
}
};
let htmlCon = 'test';
document.querySelector('#html_con').innerHTML = htmlEncode(htmlCon);
5. 특별히
xmp
,vue
원본을 보러 갔는데 어떻게 이루어졌는지 보고 싶어요.그러나 react
에서 어떻게 이루어졌는지만 찾았고 react
디렉터리가 너무 많아서 비교적 빙빙 돌려서 찾지 못했다.node-modeles/react-dom/cjs/react-dom-server.browser.development.js에서 631줄입니다.
// code copied and modified from escape-html
/**
* Module variables.
* @private
*/
var matchHtmlRegExp = /["'&<>]/;
/**
* Escapes special characters and HTML entities in a given html string.
*
* @param {string} string HTML string to escape for later insertion
* @return {string}
* @public
*/
function escapeHtml(string) {
var str = '' + string;
var match = matchHtmlRegExp.exec(str);
if (!match) {
return str;
}
var escape = void 0;
var html = '';
var index = 0;
var lastIndex = 0;
for (index = match.index; index < str.length; index++) {
switch (str.charCodeAt(index)) {
case 34:
// "
escape = '"';
break;
case 38:
// &
escape = '&';
break;
case 39:
// '
escape = '''; // modified from escape-html; used to be '''
break;
case 60:
// <
escape = '<';
break;
case 62:
// >
escape = '>';
break;
default:
continue;
}
if (lastIndex !== index) {
html += str.substring(lastIndex, index);
}
lastIndex = index + 1;
html += escape;
}
return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
}
// end code copied and modified from escape-html
/**
* Escapes text to prevent scripting attacks.
*
* @param {*} text Text value to escape.
* @return {string} An escaped string.
*/
function escapeTextForBrowser(text) {
if (typeof text === 'boolean' || typeof text === 'number') {
// this shortcircuit helps perf for types that we know will never have
// special characters, especially given that this function is used often
// for numeric dom ids.
return '' + text;
}
return escapeHtml(text);
}
/**
* Escapes attribute value to prevent scripting attacks.
*
* @param {*} value Value to escape.
* @return {string} An escaped string.
*/
function quoteAttributeValueForBrowser(value) {
return '"' + escapeTextForBrowser(value) + '"';
}
이 부분의 원본 코드는 역시 예를 들면 쉽게 이해할 수 있다.
총괄: html의 의미는 주로
vue
이 몇 개의 특수 문자를 html 실체로 바꾸는 것이다.연장:xss공격 예방:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.