相关疑难解决方法(0)

清理字符串以使其URL和文件名安全吗?

我试图想出一个功能,它可以很好地清理某些字符串,以便它们可以安全地在URL中使用(如post slug),也可以安全地用作文件名.例如,当有人上传文件时,我想确保从名称中删除所有危险字符.

到目前为止,我已经提出了以下函数,我希望能解决这个问题并允许外部UTF-8数据.

/**
 * Convert a string to the file/URL safe "slug" form
 *
 * @param string $string the string to clean
 * @param bool $is_filename TRUE will allow additional filename characters
 * @return string
 */
function sanitize($string = '', $is_filename = FALSE)
{
 // Replace all weird characters with dashes
 $string = preg_replace('/[^\w\-'. ($is_filename ? '~_\.' : ''). ']+/u', '-', $string);

 // Only allow one dash separator at a time (and make string lowercase)
 return mb_strtolower(preg_replace('/--+/u', '-', $string), …
Run Code Online (Sandbox Code Playgroud)

php url filenames sanitization

134
推荐指数
10
解决办法
17万
查看次数

什么是"友好的URL"?

我最近阅读了很多关于"友好网址"的讨论(包括在本网站和其他地方),但我不确定究竟是什么让网址"友好",为什么我们真正关心(直到某一点) .插图:

以下是大多数当前Web开发人员称为"友好"的URL示例:

www.myblog.com/posts/123/this-is-the-name-of-my-blog-post

虽然这将被视为"不友好"(即坏,尼安德特人,无知,愚蠢):

www.myblog.com/posts.aspx?id=123

我的问题:

  • "友好"网址是否包含有关相关博客帖子的重复标识信息?换句话说,一旦你有帖子的id(123),为什么你需要标题?这不是违反"不要重复自己"的咒语吗?
  • 就用户而言,URL的形式有何不同?用户是否真的手动输入完整的URL(当然除了TLD之外)?用户是否曾查看页面的URL以确定页面的内容?为什么我们需要URL中博客文章的标题?这不是页面<title>标签和内容的用途吗?
  • 我经常听到SEO作为首选"友好"URL表单的原因.为什么搜索引擎蜘蛛关心URL?它们不只是抓取页面的自动化软件(以及指向其中包含的其他页面的链接)吗?如果搜索引擎像其他软件组件(例如数据库访问组件)一样编写,则URL将只是一个无意义的标识符(类似于关系数据库中的rowguid).如果我正在设计一个数据库模式,其中包含上面的"友好"URL作为表的主键,我会(非常正确地)被剔除.

我之前说过"达到一定程度",因为很明显,网址可能会失控.以下是来自Amazon.com的实际网址,我认为他们认为没有人会认为"友好":

http://www.amazon.com/Bissell-Kitchen-Housewares/b/ref=amb_link_5001972_17?ie=UTF8&node=694500&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=gp-center-5&pf_rd_r=1ZXNJFE0CCFFDH4B9HGH&pf_rd_t=101&pf_rd_p=405478901&pf_rd_i=510080

browser seo search friendly-url

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

将UUID 32个字符的十六进制字符串转换为"YouTube风格"的短ID并返回

我正在使用uuid.uuid1()为我的所有MongoDB文档分配一个GUID.我想要一种方法,我可以得到一个11个字符,独特,区分大小写的类似YouTube的ID,例如

1_XmY09uRJ4 
Run Code Online (Sandbox Code Playgroud)

从uuid得到的十六进制字符串看起来像

ae0a0c98-f1e5-11e1-9t2b-1231381dac60
Run Code Online (Sandbox Code Playgroud)

我希望能够将缩短的ID与十六进制匹配,反之亦然,而无需在数据库中存储另一个字符串.有没有人有一些示例代码或可以指向我可以做到这一点的模块或公式的方向?

python uuid guid

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

可以在查询字符串值中使用连字符吗?

我的问题与有关.除了我的问题更为明确,因为它是否可以在查询字符串参数值中使用连字符.

我正在$_SERVER['QUERY_STRING']用PHP 解析.我想知道在查询字符串值中使用连字符是否在语法上是正确的,例如在下面的情况中,或者是否必须在浏览器URL中对连字符进行转义.下划线怎么样?

http://example.com/?q1=query-string-value-one&q2=query-string-value-two
Run Code Online (Sandbox Code Playgroud)

根据这个文件,连字符应该在所有符合标准的浏览器中都可以,但我想仔细检查.

谢谢.

php http hyphen

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

使用正则表达式验证字符串是否为URL安全

我有一个用户可以选择用户名的网站.目前,他们几乎可以输入任何字符,包括@!#等

我知道我可以使用正则表达式,这可能是我选择的.

我将使用一个否定集,我假设这是正确的工具,因为:

[^@!#]
Run Code Online (Sandbox Code Playgroud)

那么,我怎么知道所有非法字符放在那个集合中呢?我可以开始手动输入那些显而易见的内容,例如!@#$%^&*(),但有没有一种简单的方法可以做到这一点,而无需手动将它们中的每一个都放入?

我知道很多网站只允许包含字母,数字,破折号或下划线的字符串.这样的事情对我来说很有用.

任何帮助将不胜感激.

谢谢!

javascript regex encoding

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

如何在解码 Base64 字符串之前添加填充?

ColdFusionbinaryDecode(input, 'base64')很挑剔,因为填充是强制性的。

=向 base64 值添加填充的正确方法是什么?

1.)本·纳德尔使用

value &= repeatString( "=", ( 4 - ( len( value ) % 4 ) ) );
Run Code Online (Sandbox Code Playgroud)

2.) Arlo Carreon 使用

<cfset res = Len(raw_str) % 4>
<cfif res eq 2>
     <cfset raw_str &= "==">
<cfelseif res eq 3>
     <cfset raw_str &= "=">
</cfif>
Run Code Online (Sandbox Code Playgroud)

虽然它们似乎都有效,但第一个解决方案可能返回 1 到 4 =,而第二个解决方案可能返回 0、1 或 2 =维基百科上的 Base64 Padding似乎表明有效的 base64 值实际上应该只有 1 或 2 =

第一个解决方案似乎适用于所有 base64 值长度,但有时可能会返回 3 …

coldfusion base64

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

生成用户友好的URL

是否有标准的方式/ C#库将字符串转换为用户友好的uri,以便在RESTful MVC环境中使用它?

StackOverflow执行此操作,例如"èòà"转换为"eoa",删除问号,而点,逗号和括号替换为" - "等等.

有什么建议吗?谢谢

c# rest asp.net-mvc friendly-url

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

标准化字符串以在Java中创建安全的URL

我正在用Java写一个库,它以这种方式从文件名列表创建URL:

final String domain = "http://www.example.com/";

String filenames[] = {"Normal text","Ich weiß nicht", "L'ho inserito tra i princìpi"};

System.out.println(domain+normalize(filenames[0]);
//Prints  "http://www.example.com/Normal_text"
System.out.println(domain+normalize(filenames[1]);
//Prints  "http://www.example.com/Ich_weib_nicht"
System.out.println(domain+normalize(filenames[2]);
//Prints  "http://www.example.com/L_ho_inserito_tra_i_principi"
Run Code Online (Sandbox Code Playgroud)

是否存在某个Java库,该库公开了normalize我在上面的代码中使用的方法?

文献:

java string url normalization

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

JS:将布尔列表转换为紧凑字符串?

我在 javascript 中有一个巨大的布尔值列表,并希望将它们作为参数编码在 url 中,但又不占用太多空间。所以我在想,是否可以将布尔数组转换为位数组,然后将这些位转换为字符串?

例如,如果我的布尔值列表是:

[false, true, true, false, false, false, false, true]
Run Code Online (Sandbox Code Playgroud)

然后以位为单位

[0, 1, 1, 0, 0, 0, 0, 1]
Run Code Online (Sandbox Code Playgroud)

这是仅字母的二进制文件a(至少根据this)。

这样的事情可能吗?如果是这样,如何转换回来?

javascript

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

不带 URIEncoding 的 URLSearchParams.set()

URLSearchParams.set(key, value) URI 对给定的值进行编码,产生丑陋的非指定 URL。

以下测试基于此 url 友好字符列表

const url = new URL("http://www.example.com/path");
const test = "abc123+-_$#%?@,"
url.searchParams.set("foo", test);

console.log(`What foo should be: ${test}`);
console.log(`What foo is: ${url.search}`)
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 URLSearchParams fromURL.searchParams将搜索参数更新为给定的值而不是其编码?

javascript url urlsearchparams

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