2013-11-20 73 views
0

我目前正在复制某些文件,当用户更新某些信息。但是,由于在专门命名Windows文件时我们不能有任何特殊的特殊字符,是否有一个正则表达式存在来专门做这件事?所有找到的特殊字符都会被下划线替换以简化事情。PHP复制()问题和特殊字符

回答

1

最好的解决方案是使用“slugifier”,如Slugify,这将比正则表达式更安全并且经过测试,因为它可以处理所有的编码和奇怪的字符。

一个小例子尤斯Slugify

use Cocur\Slugify\Slugify; 

$slugify = new Slugify();//for iconv translit 
echo $slugify->slugify('Hello World!'); // hello-world 

另一个lib中是urlify从Django项目URLify.js的PHP接口:

echo URLify::filter ('фото.jpg', 60, "", true); 
// "foto.jpg" 

是很容易使用,也许是最好的解决方案。

或者,也许你可以使用这个备用类:

问候

+0

我试过运行这个,但我得到的问题:*** static :: seemUtf8 **方法。 – Dimitri

+0

你有哪个问题?我有这个在我的项目中运行。更好地使用Slugify,你可以使用作曲家安装它,而不是复制代码。 – mcuadros

1

这取决于你要替换的特殊字符,但例如更换所有非文字字符和-标志,你可以使用:

$new_value = preg_replace("/[^-\w]+/", "_", $original_value); 

将只留下-_a-z (也是大写)和0-9,并用下划线替换其余部分。

+0

在这种情况下,这将是更换任何特殊字符不是有效的Windows文件名。 – Dimitri

+0

@Dimitri我不知道哪些字符是完全包含的,但只需将要保留的内容添加到字符类(请注意,它是否定的字符类)。白名单总是比黑名单好。 – jeroen