text 和 textarea 均支持 minlength/maxlength,但 number/date 等类型忽略 minlength;maxlength 按 utf-16 码元计数;placeholder 中需转义 、&;textarea 保留换行与空格,渲染依赖 white-space;用户输入插入 html 前须按上下文(textcontent/innerhtml/value/placeholder)选择转义策略。

text 和 textarea 的 minlength / maxlength 限制行为差异
minlength 和 maxlength 都是原生 HTML5 属性,但它们对不同标签的支持逻辑不一致:
-
<input type="text">支持minlength和maxlength,校验在表单提交或调用checkValidity()时触发;minlength="0"合法但无约束力 -
<textarea></textarea>同样支持两者,且minlength对空格计数(即用户只输入空格也能满足最小长度),但不会自动 trim -
<input type="number">、<input type="date">等非文本类型**完全忽略**minlength—— 浏览器不报错,但属性无效 - 所有支持场景下,
maxlength限制的是 UTF-16 码元数量(不是字符数),对 emoji 或某些组合字符可能产生“少算 1 个”的现象
为什么 placeholder 里写 会显示成空白?因为 和 <code>> 是 HTML 解析器的语法边界符,浏览器在解析 placeholder 值时仍执行标签识别。哪怕它只是属性值,也会被当作潜在标签处理。
必须转义才能安全显示:
<div> → 写成 <code><div>-
"hello" → 写成 "hello"(尤其当属性值本身用双引号包裹时)
-
Tom & Jerry → 必须写成 Tom & Jerry,否则 & 后内容会被当成实体开头而截断
注意:& 是最危险的转义字符,所有含 & 的字符串都必须先转义它,再处理其他符号。
textarea 中换行和空格的显示控制难点
<textarea></textarea> 默认保留所有换行符(\n)和连续空格,但渲染到页面时,这些字符在 CSS 中受 white-space 影响极大:
- 提交后服务端收到的是原始
\n,但不同系统换行符不同(Windows 是 \r\n,macOS/Linux 是 \n)
- 若想在页面上“原样显示”换行,需配合 CSS:
white-space: pre-wrap;仅设 pre 会导致不折行溢出
- 用 JavaScript 获取值时,
textarea.value 返回的是已归一化的 \n,无需手动替换 \r\n
- 如果用
innerHTML 渲染用户输入内容,必须先对 、<code>>、& 做转义,否则有 XSS 风险
常见转义遗漏点:空格与不可见字符
开发者常以为空格不用转义,其实不然:
- 普通空格会被浏览器折叠(多个变一个),如需强制保留,用
(不换行空格)
- 半角空格:
;全角空格: ;零宽空格:(用于断字或隐藏分隔)
- 中文标点如《》、【】、「」等不属于 ASCII,直接写入 HTML 可能因编码声明缺失导致乱码,稳妥做法是用 Unicode 实体,例如
《 表示《
- 使用
textContent 赋值可自动转义,但用 innerHTML 就必须自己处理 —— 这是最容易漏掉的 XSS 入口
真正难的不是记住哪些要转,而是每次把用户输入塞进 HTML 上下文前,都得问一句:这个值最终是进 textContent、innerHTML、value 还是 placeholder?上下文变了,转义策略就得跟着变。
因为 和 <code>> 是 HTML 解析器的语法边界符,浏览器在解析 placeholder 值时仍执行标签识别。哪怕它只是属性值,也会被当作潜在标签处理。
必须转义才能安全显示:
<div> → 写成 <code><div>-
"hello"→ 写成"hello"(尤其当属性值本身用双引号包裹时) -
Tom & Jerry→ 必须写成Tom & Jerry,否则&后内容会被当成实体开头而截断 - 提交后服务端收到的是原始
\n,但不同系统换行符不同(Windows 是\r\n,macOS/Linux 是\n) - 若想在页面上“原样显示”换行,需配合 CSS:
white-space: pre-wrap;仅设pre会导致不折行溢出 - 用 JavaScript 获取值时,
textarea.value返回的是已归一化的\n,无需手动替换\r\n - 如果用
innerHTML渲染用户输入内容,必须先对、<code>>、&做转义,否则有 XSS 风险 - 普通空格会被浏览器折叠(多个变一个),如需强制保留,用
(不换行空格) - 半角空格:
;全角空格:;零宽空格:(用于断字或隐藏分隔) - 中文标点如《》、【】、「」等不属于 ASCII,直接写入 HTML 可能因编码声明缺失导致乱码,稳妥做法是用 Unicode 实体,例如
《表示《 - 使用
textContent赋值可自动转义,但用innerHTML就必须自己处理 —— 这是最容易漏掉的 XSS 入口
注意:& 是最危险的转义字符,所有含 & 的字符串都必须先转义它,再处理其他符号。
textarea 中换行和空格的显示控制难点
<textarea></textarea> 默认保留所有换行符(\n)和连续空格,但渲染到页面时,这些字符在 CSS 中受 white-space 影响极大:
常见转义遗漏点:空格与不可见字符
开发者常以为空格不用转义,其实不然:
真正难的不是记住哪些要转,而是每次把用户输入塞进 HTML 上下文前,都得问一句:这个值最终是进 textContent、innerHTML、value 还是 placeholder?上下文变了,转义策略就得跟着变。











