【发布时间】:2010-09-15 06:57:31
【问题描述】:
问题是您无法告诉用户字段中允许有多少个字符,因为转义值比未转义值包含更多字符。
我看到了一些解决方案,但没有一个看起来很好:
- 每个字段一个白名单(工作量太大,并不能完全解决问题)
- 每个字段一个黑名单(同上)
- 使用即使所有字符都被转义也可以保存数据的字段长度(不好)
- 取消限制数据库字段的大小(更糟)
- 保存十六进制未转义的数据并将责任完全传递给输出过滤(不是很好)
- 让用户猜测最大尺寸(最差)
还有其他选择吗?这种情况有“最佳实践”吗?
示例代码:
$string = 'javascript:alert("hello!");';
echo strlen($string);
// outputs 27
$escaped_string = filter_var('javascript:alert("hello!");', FILTER_SANITIZE_ENCODED);
echo strlen($escaped_string);
// outputs 41
如果数据库字段的长度是 40,则转义数据将不适合。
【问题讨论】:
-
在什么编程环境下? Win32、HTML、...?
-
对不起,它是 HTML。添加了一些标签以进行澄清。
-
抱歉,我不太明白您的问题...您是否尝试过取消转义值?它们应该恢复到正常长度。可以发一些代码吗?
标签: php html validation