【问题标题】:special character renaming in php to underscoresphp中的特殊字符重命名为下划线
【发布时间】:2014-02-16 15:46:10
【问题描述】:

重命名表单中收集的所有特殊字符以替换为下划线的好方法是什么?

以下是要替换的特殊字符的示例:

[.!,;:@#$%^&*|()?/\\\<>] space tab CR NL

我正在绑定一个用户下载的软件,在该软件中,重命名约定是将上面列出的任何字符替换为下划线。为了使我的基于 Web 的应用程序正常工作,它需要在表单字段中收集一些信息,该字段的名称与用户在软件中输入的名称完全相同,并且命名约定正常工作。因此,当 mp3 文件被上传,并且 ajax 调用检查文件时,它将完全匹配,从而触发其余功能。

【问题讨论】:

  • 您应该使用白名单而不是黑名单。正则表达式似乎是要走的路,到目前为止你有什么?

标签: php regex str-replace


【解决方案1】:

你已经快到了:

$str = "Zebo's [Test]";
echo preg_replace("~['.!,;:@#$%^&*|()?/\\<> \t\r\n\[\]]~", "_", $str);

输出:Zebo_s__Test_

已编辑以正确包含 []' - 没有意识到您的意思是要替换它们。

顺便说一句...您说您要替换“所有特殊字符”,而您上面的列表只是一个“示例”。你可能想做一些更广泛的事情,像这样:

preg_replace("~[^A-Za-z0-9]~", "_", $str);

这也会捕获反引号等字符和其他特殊字符,例如:

`îõ§¶þäô

【讨论】:

  • 似乎不起作用 Ed。原因是如果我做了 Zebo 的 [Test] 结果将如下 Zebo\'s_[Test]
  • 查看我的编辑来解决这个问题——我没有意识到你想替换 [] 字符;我以为你只是在向我们展示一个角色类。您的示例现在生成 Zebo's__Test_
  • 我还必须在其中添加 ',但这似乎可以解决问题。
  • 请看我上面的注释;您可能想要更广泛地替换所有不是字母数字的内容,以便替换所有特殊字符。
【解决方案2】:

你可以使用:

$repl = preg_replace('~[.!,;:@#$%^&*|()?/\\\<>]~', '_', $str);

【讨论】:

  • anubhava,当我使用 Zebo 的 [Test] 运行您的测试时,我得到以下信息:Zebo_'s_[Test]
  • 但是你也想替换空间吗?既然你写了space tab CR NL
  • 基本上上面发布的该行中的任何内容都需要重命名为下划线
猜你喜欢
  • 2014-11-03
  • 2023-03-19
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多