在 php 中将特殊字符转换为下划线

Converting special character to underscore in php

我正在调试 php 脚本(对 php 一无所知,所以请多多包涵)。来自表单字段的值用于创建文件名。我想将撇号转换为下划线。这有效:

 $applicant_name = str_replace("'","_",$applicant_name); 

但在一种情况下,以某种方式在表单域中引入了一个特殊字符,它看起来像撇号但实际上不是,因为它不会被转换。当我将值写入文件并 cat 文件时,它看起来像这样:

 Name : Daniel and Karen O<E2><80><99>Donnell

如何将该特殊字符转换为下划线?谢谢。

是这个角色:https://www.fileformat.info/info/unicode/char/2019/index.htm

因此,您可以将其转换为下划线:

$applicant_name = str_replace(["'", "’"], "_", $applicant_name); 

但请记住,您不想要的角色可能有无穷无尽。为什么不只使用您允许的字符。一种方法是首先将 UTF-8 转换为 ASCII:

$ascii = iconv('UTF-8', 'ASCII', $utf8);

然后删除您不喜欢的所有内容,例如:

$remaining = preg_replace('/[^A-Za-z0-9\-]/', '_', $everything);

这应该会给你一个比较干净的文件名。