用于删除空格和列表项的脚本

时间:2014-03-26 13:41:05

标签: php html

我正在尝试创建一个脚本,该脚本可以在文本框输入中输入格式化文本(更具体地说,来自word文档的复制和粘贴列表,可能是子弹头或编号)。

在调查之后,我尝试使用str_replacepreg_replace,但我正在努力获得正确的模式来做我想要的事情。我也不确定我可以用什么来“定位”我模式中的标签空间。我尝试了各种ASCII代码但没有成功(例如	

道歉在添加标签时意外点击

预脚本数据示例:

1.  Text
2.  Text
3.  Text
4.  Text

虽然这里没有清楚地显示,但在粘贴时编号和文本之间有一个大的标签空间。

后脚本:

Text
Text
Text
Text

3 个答案:

答案 0 :(得分:1)

<?php
$output_space = "";
$output_tab = "";

if(isset($_POST['submit'])) {

    $lines = explode('<br />', nl2br($_POST['input']));

    foreach($lines as $line){
        $tbl_space = explode(" ", $line);
        $tbl_tab = explode("\t", $line);
        array_shift($tbl_space); // remove first element of the array (everything before the first tab)
        array_shift($tbl_tab);
        $output_space .= trim(implode(" ", $tbl_space))."\r\n";
        $output_tab .= trim(implode("\t", $tbl_tab))."\r\n";
    }

}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" id="deformat">
Formatted data <textarea rows="4" cols="50" name="input" form="deformat" placeholder="pasted formatted text here">
</textarea>
Deformatted data (spaces) <textarea rows="4" cols="50" name="output" form="deformat"><?=$output_space?>
</textarea>
Deformatted data (tab)<textarea rows="4" cols="50" name="output" form="deformat"><?=$output_tab?>
</textarea>

<input type="submit" name="submit" value="Clean my data!">
</form>

答案 1 :(得分:0)

使用类似的东西:

$arSingleLine = explode(PHP_EOL, $yourPostString);
$arRet = array();
foreach ($arSingleLine as $sSingle)
{
$arRet[] = preg_replace('/^.+\s+/', '', $sSingle);
}

// $arRet holds now every single fixed line...

可能PHP_EOL与您的客户行结尾不匹配。要分割从单行代码结尾的每一行,只需使用preg_split,行结尾\n \r\r\n用于UNIX,OS X和Windows换行符。

答案 2 :(得分:0)

假设您正在粘贴TextArea中的内容并提交它,您可能会丢失正确的制表,因此请使用项目符号。我的PHP有点生疏,所以在你使用它之前检查一下代码,但是这样做会有效。

$text = htmlspecialchars($_POST['myFormElement']);
$lines = explode(PHP_EOL, $text);
$bullets = array();
foreach ($lines as $line)
{   
    preg_match("/([^\s]+)\s+(\w*)/", $line,$captured);
    if (count($captured) > 1 ) {
        if (strcmp($captured[1], end($bullets))) {          
            if (count($bullets) > 1 && !strcmp($bullets[count($bullets)-2],$captured[1])) {
                echo '</ul>';
                array_pop($bullets);    
            } else {
                echo '<ul>';
                array_push($bullets, $captured[1]);
            }
        } 
        echo "<li>$captured[2]</li>";
    }
}
while (count($bullets)) {
    echo "</ul>";
    array_pop($bullets);    
}