PHP / Linux shell 不需要的字符
PHP / Linux shell unwanted character
我有一个 HTML 表单(多行字段),它提供一个 PHP 代码,该代码将读取字段的每一行,并使用行字符串作为名称生成一个 pdf 文件。
我的问题是除了最后一个文件之外的所有文件都有尾随“?”在文件的末尾。我认为表单以某种方式向变量发送了一个特殊字符,我似乎无法删除它。
这是代码片段:
HTML:
<html>
<body>
<form action="mkpdf.php" method="post">
<p>Students’ name</p><br><textarea name="names" cols="40" rows="5"></textarea>
<p>Students’ 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");
}
}
好的..所以如果我在表格中输入:
Number One
Number Two
Number Three
运行 脚本..
当我列出 "out" 文件夹时,这是我得到的:
Number One?.pdf
Number Two?pdf
Number Three.pdf
问题是,如何从文件名中删除这个特殊字符?
谢谢
很可能您在提交表单时传递了“\r\n”换行符,因此当您执行 preg_split('/[\n]+/', $emails);
时它会留下 \r 符号, 这是不可打印的,因此 ? 字符
要解决此问题,请在 preg_split
中使用 \r\n
$NamesAr = preg_split('/[\r\n]+/', $names);
$EmailsAr = preg_split('/[\r\n]+/', $emails);
我有一个 HTML 表单(多行字段),它提供一个 PHP 代码,该代码将读取字段的每一行,并使用行字符串作为名称生成一个 pdf 文件。 我的问题是除了最后一个文件之外的所有文件都有尾随“?”在文件的末尾。我认为表单以某种方式向变量发送了一个特殊字符,我似乎无法删除它。
这是代码片段:
HTML:
<html>
<body>
<form action="mkpdf.php" method="post">
<p>Students’ name</p><br><textarea name="names" cols="40" rows="5"></textarea>
<p>Students’ 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");
}
}
好的..所以如果我在表格中输入:
Number One
Number Two
Number Three
运行 脚本.. 当我列出 "out" 文件夹时,这是我得到的:
Number One?.pdf
Number Two?pdf
Number Three.pdf
问题是,如何从文件名中删除这个特殊字符?
谢谢
很可能您在提交表单时传递了“\r\n”换行符,因此当您执行 preg_split('/[\n]+/', $emails);
时它会留下 \r 符号, 这是不可打印的,因此 ? 字符
要解决此问题,请在 preg_split
中使用 \r\n$NamesAr = preg_split('/[\r\n]+/', $names);
$EmailsAr = preg_split('/[\r\n]+/', $emails);