如何在PHP中验证HTML表单提交的Unicode实体字符?
问题原因
浏览器提交表单时会自动将HTML Unicode实体解码为对应的真实Unicode字符,因此你通过$_POST['action']拿到的不是字符串✘,而是解码后的删除符号✖,直接和实体字符串匹配自然会失败。
解决方案
你可以根据使用场景任选以下方案:
- 方案1:直接匹配真实Unicode字符
直接将判断条件中的值换成对应的删除符号即可,注意需要保证你的PHP文件本身使用UTF-8编码存储,避免字符解析异常。
示例代码:<?php $to_do = $_POST['action']; if( $to_do == "✖") { echo "i will delete for you"; } ?> - 方案2:将接收值转成HTML实体后匹配
如果你需要保留和实体字符串匹配的逻辑,可以先用htmlentities()函数将接收的内容转成HTML实体后再做判断。
示例代码:<?php $to_do = htmlentities($_POST['action'], ENT_QUOTES, 'UTF-8'); if( $to_do == "✘") { echo "i will delete for you"; } ?> - 方案3:优化表单结构(最推荐)
实际业务中不推荐用特殊符号作为业务状态判断值,你可以把提交的value设为普通字符串,显示层单独展示删除符号,完全避免编码匹配问题。
对应的HTML表单代码示例:
这样提交的<button type="submit" name="action" value="delete">✖</button>action值仍然是delete,你原本的判断逻辑无需修改即可正常运行。
内容的提问来源于stack exchange,提问作者webs
相关产品推荐
相关产品推荐

