我试图想出一个功能,它可以很好地清理某些字符串,以便它们可以安全地在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,我想知道是否有一种预定义的方式将外国字符转换为非外国替代品.
诸如ê,ë,é之类的字符都会产生'e'.
我正在寻找一个函数,它将获取一个字符串并返回它没有特殊字符.
任何想法将不胜感激!
来自维基百科:
甲蛞蝓是识别使用人类可读关键字的页面的URL的一部分.
为了使用户更容易键入URL,通常也会删除或替换特殊字符.例如,重音字符通常被英文字母中的字母取代; 标点符号通常被删除; 和空格(必须编码为%20或+)由短划线( - )或下划线(_)代替,这些更美观.
我开发了一个照片共享网站,用户可以在其上传,分享和查看照片.
所有页面都是自动生成的,没有我对标题的控制.因为照片的标题或用户的名称可能包含重音字符或空格,我需要一个功能来自动创建slugs并保持可读的URL.
我创建了以下函数来替换重音字符(èçëçî),删除标点符号和错误字符(#@&〜^!)并以破折号转换空格.
php:
function sluggable($str) {
$before = array(
'àáâãäåòóôõöøèéêëðçìíîïùúûüñšž',
'/[^a-z0-9\s]/',
array('/\s/', '/--+/', '/---+/')
);
$after = array(
'aaaaaaooooooeeeeeciiiiuuuunsz',
'',
'-'
);
$str = strtolower($str);
$str = strtr($str, $before[0], $after[0]);
$str = preg_replace($before[1], $after[1], $str);
$str = trim($str);
$str = preg_replace($before[2], $after[2], $str);
return $str;
}
Run Code Online (Sandbox Code Playgroud) 相关问题:
正如上面的问题,我正在寻找一种可靠,强大的方法,使用PHP将任何unicode字符减少到接近等效的ASCII.我真的想避免滚动我自己的查找表.
例如(从第一个被引用的问题被盗):Gra?iš?e变成Gracisce
http://domain.name/1-As Low As 10% Downpayment, Free Golf Membership!!!
Run Code Online (Sandbox Code Playgroud)
以上网址将报告400 bad request,
如何将这样的标题转换为用户友好的好请求?
现在ICann允许使用非拉丁字符的域名,我应该关注电子邮件验证吗?目前,我的网站使用php函数来确保在电子邮件地址的每个段中设置一些字母数字字符集.这些其他字符集,例如西里尔字母,阿拉伯语和中文,会通过验证吗?是否有推荐的PHP功能用于此?
我想删除重音,将所有字符都改为小写,并删除任何数字和特殊字符.
示例:
Frédér8ic@ - >弗雷德里克
提案:
def remove_accents(data):
return ''.join(x for x in unicodedata.normalize('NFKD', data) if \
unicodedata.category(x)[0] == 'L').lower()
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点?
可能重复:
PHP中的URL友好用户名?
我在某种程度上混淆了使用适当的函数来逃避和创建一个slu ..
我用过这个:
$slug_title = mysql_real_escape_string()($mtitle);
Run Code Online (Sandbox Code Playgroud)
但有人告诉我不要使用它并使用urlencode()
哪一个更适合slu and和安全
正如我在SO中看到的,它插入 - 在单词之间:
https://stackoverflow.com/questions/941270/validating-a-slug-in-django
Run Code Online (Sandbox Code Playgroud) 我试图删除-字符串末尾的尾随(破折号).这是我的代码:
<?php
$str = 'SAVE $45! - Wed. Beach Co-ed 6s (Jul-Aug)';
echo ereg_replace('([^a-z0-9]+)','-',strtolower($str));
?>
产生这个:
save-45-wed-beach-co-ed-6s-jul-aug-
如何删除特定的尾随字符,在这种情况下是破折号?
提前致谢.
出于某种原因(这是一个很长的故事)我需要用他们的'普通'对应物改变口音.
我这样做:
$array = array(
'ò' => 'o',
'ó' => 'o',
'à' => 'a',
'è' => 'e',
'é' => 'e',
'ù' => 'u',
);
return str_replace(array_keys($array), array_values($array), $string);
Run Code Online (Sandbox Code Playgroud)
但它不起作用(正常的字母就像一个魅力)我认为这是一个编码问题,还有另一种方法吗?我怎样才能解决这个问题?
谢谢.
可能重复:
PHP中的URL友好用户名?
我有这样的事情:
'mrt1' => 'Zhongxiao Dunhua Sun'
Run Code Online (Sandbox Code Playgroud)
这将被包含在这样的锚链接中:
<a href="'. $mrt1 .'">'. $mrt1 .'</a>
Run Code Online (Sandbox Code Playgroud)
我希望输出是这样的:
<a href="zhongxiao-dunhua-sun">Zhongxiao Dunhua Sun</a>
Run Code Online (Sandbox Code Playgroud)
如何做到这一点,以便我可以将该名称转换为URL-frienly字符串(所以我可以将它放在href属性中)?
在我的数据库中有一个URL列是否可以存储URL,例如:/ this-is-a-keyword
然后在我的php查询中使用该列来获取我需要的信息而不是使用整数列?
所以基本上当我去Mysite.com/ 这是一个关键字时,我会从那一行返回结果.
可能重复:
PHP中的URL友好用户名?
有没有办法使字符串"URL安全",这意味着用连字符替换空格,删除任何标点符号并将所有大写字母更改为小写?
例如:
"This is a STRING" -› "this-is-a-string"
Run Code Online (Sandbox Code Playgroud)
要么
"Hello World!" –› "hello-world"
Run Code Online (Sandbox Code Playgroud) php ×12
string ×3
url ×3
diacritics ×2
regex ×2
slug ×2
database ×1
email ×1
encoding ×1
filenames ×1
friendly-url ×1
icann ×1
python ×1
sanitization ×1
seo ×1
validation ×1