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>同样支持两者,且minlength对空格计数(即用户只输入空格也能满足最小长度),但不会自动 trim -
<input type="number">、<input type="date">等非文本类型**完全忽略**minlength—— 浏览器不报错,但属性无效 - 所有支持场景下,
maxlength限制的是 UTF-16 码元数量(不是字符数),对 emoji 或某些组合字符可能产生“少算 1 个”的现象
为什么 placeholder 里写 <div> 会显示成空白?
因为 < 和 > 是 HTML 解析器的语法边界符,浏览器在解析 placeholder 值时仍执行标签识别。哪怕它只是属性值,也会被当作潜在标签处理。
必须转义才能安全显示:
-
<div>→ 写成<div> <li> <code>"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渲染用户输入内容,必须先对<、>、&做转义,否则有 XSS 风险 - 普通空格会被浏览器折叠(多个变一个),如需强制保留,用
(不换行空格) - 半角空格:
;全角空格:;零宽空格:(用于断字或隐藏分隔) - 中文标点如《》、【】、「」等不属于 ASCII,直接写入 HTML 可能因编码声明缺失导致乱码,稳妥做法是用 Unicode 实体,例如
《表示《 - 使用
textContent赋值可自动转义,但用innerHTML就必须自己处理 —— 这是最容易漏掉的 XSS 入口
注意:& 是最危险的转义字符,所有含 & 的字符串都必须先转义它,再处理其他符号。
立即学习“前端免费学习笔记(深入)”;
textarea 中换行和空格的显示控制难点
<textarea> 默认保留所有换行符(\n)和连续空格,但渲染到页面时,这些字符在 CSS 中受 white-space 影响极大:
常见转义遗漏点:空格与不可见字符
开发者常以为空格不用转义,其实不然:
真正难的不是记住哪些要转,而是每次把用户输入塞进 HTML 上下文前,都得问一句:这个值最终是进 textContent、innerHTML、value 还是 placeholder?上下文变了,转义策略就得跟着变。



















