PHP / Linux shell不需要的字符

时间:2016-02-11 02:19:17

标签: php linux special-characters

我有一个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>

PHP:

<?php

require ('fpdf/fpdf.php');
require ('PHPMailer-master/PHPMailerAutoload.php');


if (isset ($_POST["names"]) && ($_POST["emails"])) {
  exec('cd out ; rm *');
  $date = date('F \, jS');
  $names = trim($_POST["names"]);
  $emails = trim($_POST["emails"]);
  $NamesAr = preg_split('/[\n]+/', $names);
  $EmailsAr = preg_split('/[\n]+/', $emails);
  foreach ($NamesAr as $name) {
    foreach ($EmailsAr as $email) {
  ...
  PDF commands
  ...
     $pdf->Output("out/$name.pdf");
  }
  }

好的..所以如果在表格I中输入:

Number One
Number Two
Number Three

运行脚本.. 当我列出&#34; out&#34;这是我得到的文件夹:

Number One?.pdf
Number Two?pdf
Number Three.pdf

问题是,如何从文件名中删除此特殊字符?

由于

1 个答案:

答案 0 :(得分:0)

很可能你已经过了&#34; \ r \ n&#34;提交表单时的换行符,所以当你执行preg_split('/[\n]+/', $emails);时,它会在那里留下 \ r 符号,这是不可打印的,因此字符

要解决此问题,请在preg_split

中使用\ r \ n
$NamesAr = preg_split('/[\r\n]+/', $names);
$EmailsAr = preg_split('/[\r\n]+/', $emails);