如何修剪/隐藏文件扩展名并使用PHP在页面上显示文件名?

时间:2014-08-01 18:40:59

标签: php html web-development-server

我创建了一个表单,用户从下拉菜单中选择日期和选项(列出路径中的所有文件)并提交。提交时,用户的输入以特定格式写入其他文件,但也显示在表单下方,以便用户可以看到最终输出。输出,特别是包含日期,然后是基于所选选项的链接(用户可以进行多项选择)。

示例:

用户从日期选择器中选择08-01-2014,从下拉列表中选择option1.txt。现在已经以这种格式输出到file.js

'08-01-2014' : '<a href="/path/option1.txt" target="_blank"><span>option1.txt</span></a>',

并且也以此格式显示在表单下方( option1.txt带有下划线,因为它是一个链接,但不知道我是否可以在此处为此显示目的而强调 ):

08-01-2014 : option1.txt

所以我的问题是如何修改记下用户输入的代码,以便显示该代码的代码可以读取文件并显示08-01-2014 : option1而不显示.txt

记下用户输入的PHP代码( writedown.php ):

<?php
    $pickdate = $_POST['date'];
    $workout = $_POST['workout'];
    $date = '   \''.$pickdate .'\' : \'<a href="../routines/'.$workout.'" target="_blank"><span>'.$workout.'</span></a>\',' .PHP_EOL;
    $file = 'test.js';
// Open the file to get existing content
    $current = file_get_contents($file);
// Append a new workout to the file
    $current .= $date;
    $current = preg_replace('/};/', "", $current);
    $current = $current.'};';
// Write the contents back to the file
    file_put_contents($file, $current);
    header( "location:index.php" );
?>

在窗体下显示用户输入的PHP代码( index.php ):

<?php
    $file = "test.js";
    $current = file_get_contents( $file );
    $current = preg_replace('/var codropsEvents = {/', "", $current);
    $current = preg_replace('/,/', "<br>", $current);
    $current = preg_replace('/\'/', " ", $current);
    $current = preg_replace('/ /', " ", $current);
    $current = preg_replace('/};/', "", $current);
    //$current = preg_replace('/option1.txt/', "<a href='test.php'>option1</a>", $current);
    echo $current;
?>

我尝试了所有我知道的东西,我可以在互联网上找到,而我能得到的最接近的是上面代码中的注释行

//$current = preg_replace('/option1.txt/', "<a href='test.php'>option1</a>",

它只适用于单个条目,我必须手动添加相同的行,以便我可以将它应用于另一个条目。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用basename从完整路径中获取文件名:

$filename = basename($url,'.txt');

其中$url是.txt文件的路径

答案 1 :(得分:0)

您可以使用preg_replace来使用正则表达式来完成工作。

$current = preg_replace(
    '/(.+)\.(.{2,3})$/i',
    '<a href="test.php">\1</a>',
    $current
);