小编Edu*_*nho的帖子

如何在PHP中舍入/ ceil/floor一个bcmath数字?

是否有任何库函数用于此目的,所以我不手动完成并冒险以TDWTF结束?

echo ceil(31497230840470473074370324734723042.6);

// Expected result
31497230840470473074370324734723043

// Prints
<garbage>
Run Code Online (Sandbox Code Playgroud)

php largenumber bcmath

10
推荐指数
2
解决办法
4410
查看次数

防止错误的数据输入

将数据验证完全委托给数据库引擎约束是一种好习惯吗?

从应用程序验证数据不会阻止从另一个软件无效插入(可能由另一个团队用另一种语言编写).使用数据库约束可以减少需要担心无效输入数据的点.

如果您在数据库和应用程序中都进行了验证,那么维护变得很无聊,因为您必须更新谁知道有多少应用程序的代码,从而增加了人为错误的可能性.

我只是看不到这么做,看着自由软件项目的代码.

database postgresql web-applications

4
推荐指数
2
解决办法
1478
查看次数

经过十六进制清理后,HTML数据超出了字段长度

问题是你无法真正告诉用户字段中允许有多少字符,因为转义值显然比未转义字符具有更多字符.

我看到一些解决方案,但没有一个看起来很好:

  • 每个领域一个白名单(工作太多,并没有完全解决问题)
  • 每个字段的一个黑名单(与上面相同)
  • 使用可以保存数据的字段长度,即使所有字符都被转义(坏)
  • 取消隐藏数据库字段的大小(更糟)
  • 保存十六进制数据并完全将责任传递给输出过滤(不是很好)
  • 让用户猜出最大尺寸(最差)

还有其他选择吗?这种情况有"最佳做法"吗?

示例代码:

$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
Run Code Online (Sandbox Code Playgroud)

如果数据库字段的长度为40,则转义的数据将不适合.

html php validation

1
推荐指数
1
解决办法
457
查看次数