小编Jas*_*ith的帖子

检测文本字符串中的(顽皮或漂亮)URL或链接

如何检测(使用正则表达式或启发式方法)一个文本字符串中的网站链接,例如注释?

目的是防止垃圾邮件.HTML被剥离,所以我需要检测复制和粘贴的邀请. 垃圾邮件发送者发布链接应该不经济,因为大多数用户无法成功访问该页面.我想要有关最佳实践的建议,参考或讨论.

一些目标:

  • 结构良好的URL(http://some-fqdn/some/valid/path.ext)
  • URL但没有http://前缀(即有效的FQDN +有效的HTTP路径)
  • 任何其他有趣的业务

当然,我阻止垃圾邮件,但可以使用相同的过程来自动链接文本.

思路

以下是我在想的一些事情.

  • 内容是母语散文,所以我可以在检测中触发快乐
  • 我应该首先删除所有空格,以便抓住" www .example.com"吗?普通用户是否知道自己删除空间,或者做任何浏览器"做什么意思"并为你剥离它?
  • 也许多次通过是更好的策略,扫描:
    • 格式良好的网址
    • 所有非空格后跟'.' 随后是任何有效的TLD
    • 还要别的吗?

相关问题

我已经阅读了这些内容,现在它们已在此处记录,因此您可以根据需要参考这些问题中的正则表达式.

更新和摘要

哇,我在这里列出了一些非常好的启发式方法!对我来说,最好的砰砰声是以下综合:

  1. @Jon Bright检测TLD的技术(一个很好的防御性阻塞点)
  2. 对于那些可疑的字符串,请根据@capar将点替换为带点的字符
  3. 一个好看的字符是@ Sharkey的下标· (即" · ").· 也是一个单词边界,因此随便复制和粘贴更难.

这应该使垃圾邮件发送者的CPM足够低,以满足我的需求; "旗帜不合适"的用户反馈应该抓住其他任何东西.列出的其他解决方案也非常有用:

  • 剥去所有虚线四边形(@ Sharkey对自己答案的评论)
  • @ Sporkmonger对客户端Javascript的要求,它在表单中插入了一个必需的隐藏字段.
  • 对URL服务器端进行Ping操作以确定它是否是网站.(也许我可以按照@Nathan通过SpamAssassin或其他贝叶斯过滤器运行HTML ..)
  • 查看Chrome的智能地址栏来源,了解Google使用的巧妙技巧
  • 呼叫OWASP AntiSAMY或其他Web服务以进行垃圾邮件/恶意软件检测.

language-agnostic url sanitization spam-prevention

37
推荐指数
4
解决办法
7010
查看次数

如何从X会话外部运行X程序(例如从控制台或SSH)

如果不是登录控制台的人,如何运行X应用程序并将其显示在该X会话上?假设我是root用户,或者我是登录的用户,所以原则上我有继续执行此操作.但我怎么说服X呢?

这种情况的一些例子:

  • 使用SSH登录并运行显示在远程计算机屏幕上的程序(通过SSH进行隧道传输 - 完全不同)
  • 通过ImageMagick import命令获取X会话屏幕截图的cron作业
  • 运行击键记录器以进行审计

这是一个直接来自无窗口Linux终端Launch OpenGL应用程序的简单版本

linux x11 ssh cron

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

Javascript尝试... catch ... else ...最后像Python,Java,Ruby等

使用Javascript如何能复制四部分try- catch- else- finally执行模式,其他语言的支持?

一个清晰,简短的摘要来自Python 2.5什么是新的.在Javascript术语中:

// XXX THIS EXAMPLE IS A SYNTAX ERROR
try {
  // Protected-block
} catch(e) {
  // Handler-block
} else {
  // Else-block
} finally {
  // Final-block
}
Run Code Online (Sandbox Code Playgroud)

执行Protected-block中的代码.如果代码抛出异常,则执行Handler-block ; 如果没有抛出异常,则执行Else-block.

无论先前发生了什么,一旦代码块完成并且处理了任何抛出的异常,就会执行Final-block.即使在Handler-blockElse-block中出现错误并引发新的异常,Final-block中的代码仍然会运行.

请注意,在受保护块的末尾剪切Else-block和粘贴是错误的.如果在Else-block中发生错误,则不能Handler-block处理.

javascript try-catch

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

从目录中选择随机文件的最佳方法

从Python目录中选择随机文件的最佳方法是什么?

编辑:这是我正在做的事情:

import os
import random
import dircache

dir = 'some/directory'
filename = random.choice(dircache.listdir(dir))
path = os.path.join(dir, filename)
Run Code Online (Sandbox Code Playgroud)

这特别糟糕,还是有更好的方法?

python random file

31
推荐指数
5
解决办法
5万
查看次数

CouchDB文档更新处理程序(就地更新)

http://wiki.apache.org/couchdb/Document_Update_Handlers

CouchDB(0.10及更高版本)现在支持就地更新.我无法理解它是如何工作的.我试图使用提供的示例,但我无法让它工作.

有人可以提供一些示例和用于访问就地更新的uris.

谢谢

couchdb

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

在Ruby中使用双叉创建一个守护进程

在Ruby中创建性能良好的Unix或Linux守护进程的正确方法是什么?

无论如何,一个表现良好的守护进程的定义是什么,以及如何在Ruby中编写这样的程序?

ruby unix linux fork daemon

27
推荐指数
2
解决办法
7946
查看次数

截断unicode,使其在编码进行电汇时符合最大尺寸

给定Unicode字符串和这些要求:

  • 该字符串被编码为一些字节序列格式(例如UTF-8或JSON unicode转义)
  • 编码的字符串具有最大长度

例如,iPhone推送服务需要JSON编码,最大总包数为256字节.

截断字符串以便重新编码为有效的Unicode并且它显示得相当正确的最佳方法是什么?

(人类语言理解不是必需的 - 截断的版本看起来很奇怪,例如对于孤立的组合字符或泰语元音,只要软件在处理数据时不会崩溃.)

也可以看看:

python unicode json truncate

27
推荐指数
2
解决办法
6151
查看次数

原则上,Android设备是否可以通过蓝牙/ GameKit与iPhone连接?

(我对纯理论不感兴趣,但作为实际的近期或中期可能性,比如在12-24个月内.)

作为一个熟悉(但不专注于)两个主要智能手机平台的开发人员,我是否应该期待一个可以将自己欺骗到iPhone应用程序基于GameKit的网络上的Android库.平台之间的蓝牙接口可能会为制作有用的应用程序提供机会,这与调制解调器通过Metcalfe定律使PC/Mac平台受益的方式相似.

我正在寻找两个答案之一:

  1. 这显然不太可能(例如因为加密)?如果是这样,原因是什么?原则上是否可行,但需要多年的逆向工程(如SMB/CIFS/Samba)?或者这是一个不用脑子,只是时间问题?请提供证据支持您的理由.

  2. 除了GameKit之外,还有另一种方法可以拥有直接的点对点网络吗?例如,使用蓝牙或ad-hoc WiFi的手动网络?将Android设备欺骗到现有的iPhone应用程序会很不错,但我的主要问题是,这些设备可以互相说话吗!

iphone android bluetooth gamekit

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

如何阻止Gmail将我的网络应用发送的邮件标记为垃圾邮件?

我有一个简单的Web应用程序,提供每日财务数据.用户订阅,我们每天都会向他们发送电子邮件.但是,Gmail将我们所有的电子邮件标记为垃圾邮件.我们应该注意什么?

gmail spam

24
推荐指数
3
解决办法
3万
查看次数

Rails:在多个控制器操作中设置公共实例变量

应该如何有几个不同的控制器的行为设置公共实例变量使用的模板,但在操作运行后.

换句话说,我希望这在我的application_controller中工作.

class ApplicationController < ActionController::Base
  after_filter :set_something_common

  def set_something_common
    # All controllers' actions have queried the DB and set @foo for me...
    @bar = some_calculation_on(@foo)
    # ... and all templates expect @bar to bet set.
  end
end
Run Code Online (Sandbox Code Playgroud)

不起作用,因为after_filter渲染后运行.精细.但是正确的模式是什么?

同样,set_something_common在操作之后运行是很重要的,因为这些操作会执行特定于案例的操作; 但他们都搞定了@foo.

我的想法似乎都不理想:

  • 呼吁set_something_common()每一个需要它的行动的底部.
  • 将所有控制器的特定于案例的代码重构为case_specific_code()并强制它们按顺序运行:

    before_filter :case_specific_code, :set_something_common
    
    Run Code Online (Sandbox Code Playgroud)
  • 子类application_controller并重新定义该index方法.

有什么想法吗?谢谢.

编辑:马修的回应促使我澄清:

几个控制者的索引()都进行分页,每个分页都采用参数@offset@limit(通过全局before_filter)来查看数据切片.大.现在我想要一个通用方法来为"下一个切片"链接计算RESTful URL.我被鼓励看到url_for()生成一个返回相同资源的URL,所以我试过: …

model-view-controller ruby-on-rails filter

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