我正在尝试创建一个脚本,该脚本可以在文本框输入中输入格式化文本(更具体地说,来自word文档的复制和粘贴列表,可能是子弹头或编号)。
在调查之后,我尝试使用str_replace
和preg_replace
,但我正在努力获得正确的模式来做我想要的事情。我也不确定我可以用什么来“定位”我模式中的标签空间。我尝试了各种ASCII代码但没有成功(例如	
)
道歉在添加标签时意外点击
预脚本数据示例:
1. Text
2. Text
3. Text
4. Text
虽然这里没有清楚地显示,但在粘贴时编号和文本之间有一个大的标签空间。
后脚本:
Text
Text
Text
Text
答案 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);
}