PHP/Linux shell不需要的字符

PHP/Linux shell不需要的字符,php,linux,special-characters,Php,Linux,Special Characters,我有一个HTML表单(包含多行的字段),它提供了一个PHP代码,该代码将读取字段的每一行,并使用该行字符串作为名称生成一个pdf文件。 我的问题是,除了最后一个文件外,所有文件的末尾都有一个尾随“?”。我认为表单向变量发送了一个特殊字符,我似乎无法删除它 以下是代码片段: HTML: <html> <body> <form action="mkpdf.php" method="post"> <p>Students&rsquo; nam

我有一个HTML表单(包含多行的字段),它提供了一个PHP代码,该代码将读取字段的每一行,并使用该行字符串作为名称生成一个pdf文件。 我的问题是,除了最后一个文件外,所有文件的末尾都有一个尾随“?”。我认为表单向变量发送了一个特殊字符,我似乎无法删除它

以下是代码片段:

HTML:

<html>
<body>

<form action="mkpdf.php" method="post">
  <p>Students&rsquo; name</p><br><textarea name="names" cols="40" rows="5"></textarea>
  <p>Students&rsquo; email</p><br><textarea name="emails" cols="40" rows="5"> </textarea>
  <br><br><input type="submit" value="Submit">
</form>
运行脚本。。 当我列出“out”文件夹时,我得到的是:

Number One?.pdf
Number Two?pdf
Number Three.pdf
问题是,如何从文件名中删除这个特殊字符


谢谢

在提交表单时,您很可能正在通过“\r\n”换行符,因此当您执行
预拆分(“/[\n]+/”,$emails)时它在那里留下\r符号,该符号不可打印,因此出现字符

要解决此问题,请在preg\u split中使用\r\n

$NamesAr = preg_split('/[\r\n]+/', $names);
$EmailsAr = preg_split('/[\r\n]+/', $emails);
Number One?.pdf
Number Two?pdf
Number Three.pdf
$NamesAr = preg_split('/[\r\n]+/', $names);
$EmailsAr = preg_split('/[\r\n]+/', $emails);