我试图想出一个功能,它可以很好地清理某些字符串,以便它们可以安全地在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) 我最近阅读了很多关于"友好网址"的讨论(包括在本网站和其他地方),但我不确定究竟是什么让网址"友好",为什么我们真正关心(直到某一点) .插图:
以下是大多数当前Web开发人员称为"友好"的URL示例:
www.myblog.com/posts/123/this-is-the-name-of-my-blog-post
虽然这将被视为"不友好"(即坏,尼安德特人,无知,愚蠢):
www.myblog.com/posts.aspx?id=123
我的问题:
<title>标签和内容的用途吗?我之前说过"达到一定程度",因为很明显,网址可能会失控.以下是来自Amazon.com的实际网址,我认为他们认为没有人会认为"友好":
我正在使用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与十六进制匹配,反之亦然,而无需在数据库中存储另一个字符串.有没有人有一些示例代码或可以指向我可以做到这一点的模块或公式的方向?
我的问题与此有关.除了我的问题更为明确,因为它是否可以在查询字符串参数值中使用连字符.
我正在$_SERVER['QUERY_STRING']用PHP 解析.我想知道在查询字符串值中使用连字符是否在语法上是正确的,例如在下面的情况中,或者是否必须在浏览器URL中对连字符进行转义.下划线怎么样?
http://example.com/?q1=query-string-value-one&q2=query-string-value-two
Run Code Online (Sandbox Code Playgroud)
根据这个文件,连字符应该在所有符合标准的浏览器中都可以,但我想仔细检查.
谢谢.
我有一个用户可以选择用户名的网站.目前,他们几乎可以输入任何字符,包括@!#等
我知道我可以使用正则表达式,这可能是我选择的.
我将使用一个否定集,我假设这是正确的工具,因为:
[^@!#]
Run Code Online (Sandbox Code Playgroud)
那么,我怎么知道所有非法字符放在那个集合中呢?我可以开始手动输入那些显而易见的内容,例如!@#$%^&*(),但有没有一种简单的方法可以做到这一点,而无需手动将它们中的每一个都放入?
我知道很多网站只允许包含字母,数字,破折号或下划线的字符串.这样的事情对我来说很有用.
任何帮助将不胜感激.
谢谢!
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 …
是否有标准的方式/ C#库将字符串转换为用户友好的uri,以便在RESTful MVC环境中使用它?
StackOverflow执行此操作,例如"èòà"转换为"eoa",删除问号,而点,逗号和括号替换为" - "等等.
有什么建议吗?谢谢
我正在用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我在上面的代码中使用的方法?
文献:
我在 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)。
这样的事情可能吗?如果是这样,如何转换回来?
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 ×3
url ×3
friendly-url ×2
php ×2
asp.net-mvc ×1
base64 ×1
browser ×1
c# ×1
coldfusion ×1
encoding ×1
filenames ×1
guid ×1
http ×1
hyphen ×1
java ×1
python ×1
regex ×1
rest ×1
sanitization ×1
search ×1
seo ×1
string ×1
uuid ×1