屏幕阅读器能否识别HTML转义字符?JAWS问题及方案咨询
问题解答
屏幕阅读器读取转义实体是标准行为,不是bug
不止JAWS,包括NVDA、VoiceOver在内的多数主流屏幕阅读器,处理aria-label时都会把它当成纯文本内容,不会解析HTML转义实体。这是因为aria-label的设计就是用来提供纯文本语义描述的,不是用来解析HTML的。所以你传入<这种转义实体,阅读器就直接读“<”这个字符串,不会转成“小于”符号的语义——这是符合规范的正常表现,不是bug。
转符号为对应名称的方案可行,注意结合场景调整
你的思路没问题,但转换的时候得看实际语义:
<、>换成“less than”“greater than”(中文场景用“小于”“大于”),能让阅读器清晰传递符号的含义"、'如果是表示引用符号,换成“quotation mark”“apostrophe”(中文用“双引号”“单引号”)就很合理;要是文本内容里的一部分,得保证转换后读着自然不别扭&分情况:品牌名里的(比如AT&T)读“and”更自然,纯符号场景用“ampersand”(中文用“和”“与”)更准确
更省心的优化方式
其实你可以省掉手动转换的步骤:用DOM的setAttribute方法设置aria-label时,浏览器会自动处理特殊字符的转义,不用你手动转义内容。比如直接传<span> abc"给setAttribute('aria-label', '<span> abc"'),浏览器会自动把它转成安全的HTML属性值,同时aria-label的语义内容还是原始的纯文本,屏幕阅读器会正确识别符号并朗读对应的语义(部分阅读器甚至会自动把<读成“less than”)——这样既保证了HTML安全,又不用额外写转换逻辑。
内容的提问来源于stack exchange,提问作者Evry
相关产品推荐
相关产品推荐

