小编bit*_*inn的帖子

url 应该以编码形式存储还是以解码形式存储?

我的问题有点奇怪,但让我解释一下:

\n\n
    \n
  1. 假设有效的 URI 不允许使用 RFC-2396 的 unicode,则 URI 中的所有 unicode 应使用百分比编码进行转义。

  2. \n
  3. 有效的 URL 应该是有效的 URI,因此我们应该在发出请求或放入它们时使用http://example.com/%E4%BD%A0%E5%A5%BD而不是(尽管大多数浏览器可以处理后一种情况)。http://example.com/\xe4\xbd\xa0\xe5\xa5\xbdhref

  4. \n
  5. 此外,我们接受用户提交的 URL,这些 URL 也经过编码(因为当您从地址栏复制 URL 时,浏览器会对它们进行编码)。

  6. \n
  7. 因此我们决定(可能是一个错误)将它们存储为http://example.com/%E4%BD%A0%E5%A5%BD,而不是http://example.com/\xe4\xbd\xa0\xe5\xa5\xbd,毕竟,这是原始输入和正确的 url。

  8. \n
\n\n

当我尝试显示此类 URL 时,我的问题就出现了,鉴于它们是用户提交的,我需要对这些数据运行 xss 过滤器。某些实现(例如xss-filters)似乎将encodeURI作为过滤器的一部分运行,这意味着%将进行双重编码,例如。%E4-> %25E4,在此过程中破坏 url。

\n\n

那么我们是否应该以解码的形式存储 url(即使它们是无效的)?decodeURI对我来说,在输出上运行没有多大意义......

\n

javascript url encoding mongodb node.js

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

我们如何区分deflate stream和deflateRaw流?

一些HTTP服务器发送deflate原始体(没有zlib头)而不是实际的deflate体.请参阅讨论:为什么真实世界的服务器更喜欢gzip而不是deflate编码?

是否有可能在Node.js中检测它们并正确处理膨胀?我的意思是除了尝试createInflate他们并抓住错误然后再试createInflateRaw一次.

http zlib node.js

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

防止在使用 GitHub 时将大文本文件添加到提交

我们要防止:

  • 非常大的文本文件(每个文件 > 50MB)不会被提交到git而不是git-lfs,因为它们会增加 git 历史记录。
  • 问题是,其中 99% 小于 1MB,应该提交以获得更好的差异。
  • 大小不同的原因:这些是 YAML 文件,它们支持通过 base64 编码进行二进制序列化。
  • 我们不能可靠地防止二进制序列化的原因:这是一个 Unity 项目,由于各种原因需要二进制序列化。

鉴于:

  • GitHub 托管缺乏预接收钩子支持。
  • git-lfs 缺少文件大小属性支持。

问题:

  1. 我们如何可靠地防止将大文件添加到提交中?
  2. 这可以通过 repo 中的配置文件来完成,以便所有用户都能优雅地遵循此规则吗?
  3. 如果没有,这是否可以通过 bash 命令别名来完成,以便受信任的用户可以在他们不小心看到git add一个大文件并且它没有被处理时看到警告消息git-lfs

(我们的环境是macOS。我看了很多解决方案,目前没有一个能满足我们的需求)

git bash github unity-game-engine git-lfs

5
推荐指数
2
解决办法
2436
查看次数

squash提交释放Git LFS存储吗

我发现自己在问一个问题:

  • 如果我们知道git lfs要跟踪每个二进制文件的每个版本的完整副本(AFAIK);

  • 我们的功能分支之一包含对同一组大型二进制文件的许多编辑;

  • 然后,在压扁并合并(例如,作为单个提交合并)并删除此功能分支之后,我们最终是否会在远程仓库上释放存储?

git lfs prune当不再使用二进制文件时,AFAIK 应该释放本地存储库;如果没有对这些较旧版本的二进制文件的引用,远程存储库是否知道要释放存储库?)

git git-lfs

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

当存在许多与文件相关的操作时,Vagrant/Virtualbox,共享文件夹不同步

由于共享文件夹访问速度慢,这不是关于vagrant或virtualbox guest运行缓慢运行的,我们知道可以通过启用nfs来解决或多或少的问题.

这是相当关于安装的共享文件夹不能同步时,有虚拟机中的许多文件操作(启用NFS不阻止它的发生).

例如,当我们安装软件包时,例如在vm中使用php composer或node.js npm,有一定概率正常composer updatenpm install将失败,一旦失败,只会vagrant reload帮助恢复同步文件夹并允许相同的命令通过没有问题.

这种随机故障仅在共享文件夹(nfs或不是)上执行时发生,因此apt-get upgrade不会触发与在vm文件夹中运行相同的问题.

由于当我们从主机服务器运行composer或npm时没有出现相同的同步问题,我想知道是什么导致它并且我们如何调试呢?

我们的流浪汉设置和配置:

if Vagrant::Util::Platform.windows?
    config.vm.synced_folder "www", "/var/www", :extra => "dmode=777,fmode=777", :owner => "vagrant", :group => "vagrant"
else
    config.vm.synced_folder "www", "/var/www", :extra => "dmode=777,fmode=777", :nfs => true
end
Run Code Online (Sandbox Code Playgroud)

嘉宾:Ubuntu 12.04 LTS x64

主持人:Windows 8,Mac OSX 10.8,Ubuntu 13(是的,他们都随机遇到同样的问题)

virtualbox vagrant

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

使用Laravel 4从旧表迁移到新表的数据

是否可以将旧表中的数据复制到新表而不是rename?我们正在计划一个主要的数据库模式升级,并希望保留当前的数据表,因此迁移down()可以像删除新创建的表一样简单.

我们意识到这会打破向后兼容性,因为migrate:rollback它并没有真正将任何新数据回滚到以前的状态; 但是由于模式更新的规模,启用这样的东西将非常昂贵,我们满足于简单的单向迁移,只要它保留旧表.

这可以在Laravel的迁移和模式中完成吗?

php migration database-migration laravel laravel-4

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

缩短长枚举名称

这是一个奇怪的问题,但请耐心等待......

所以我使用的是第三方库,它使用了很长的枚举名称,例如:

ALongClassName.ALongPublicEnumType.ALongAndVerboseEnumName

因为我需要将a code与每个枚举值进行比较,所以我想知道有一种方法可以缩短枚举名称以便于阅读,例如:

code == Event.Success

代替:

code == ALongClassName.ALongPublicEnumType.ALongAndDescriptiveEnumName

c# enums unity-game-engine

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

使用three.js对Particle进行程序生成的纹理

我的目标是创建一个粒子系统,其中涉及每个粒子(顶点)的程序生成纹理,但我发现很难创建这样的粒子系统的原型,它在Canvas和WebGL渲染器下都可以使用three.js

我想要实现的标准:

  1. 渲染器独立(ParticleCanvasMaterial不能与WebGL一起使用)
  2. 圆形纹理(ParticleBasicMaterial不喜欢画布纹理;无法使其输出圆形)
  3. 程序生成那些纹理(不能只使用带有准备的圆纹理的loadTexture)

目前这是否可以使用three.js?我错过了一些功能吗?

//create a texture generation function
function simpleTexture() {

    // generate canvas
    var canvas = document.createElement('canvas');
    canvas.width = 100;
    canvas.height = 100;

    // get context
    var context = canvas.getContext('2d');

    // circle texture
    context.beginPath();
    context.arc(50, 50, 50, 0, Math.PI*2, true); 
    context.closePath();
    context.fillStyle = "red";
    context.fill();

    // get texture
    texture = new THREE.Texture(
        canvas
    );

    texture.needsUpdate = true;
    return texture;

}

    //then use it like following...

    var material = new THREE.ParticleBasicMaterial({
        color: 0xffffff,
        size: …
Run Code Online (Sandbox Code Playgroud)

javascript procedural-generation three.js

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