支持按字符数、句子、段落、正则表达式灯方式灵活切割文本。支持复制内容或者直接上传txt文档。
有大佬可以继续完善下,目前的测试的地址这个:diuta.com/app/txt.php
代码如下:
// 定义允许的文件类型
define('ALLOWED_MIME', ['text/plain']);
define('MAX_FILE_SIZE', 1048576); // 1MB
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$output = [];
$error = '';
try {
// 获取输入文本
$text = '';
if (isset($_FILES['uploadFile']) && $_FILES['uploadFile']['error'] === UPLOAD_ERR_OK) {
// 验证上传文件
if ($_FILES['uploadFile']['size'] > MAX_FILE_SIZE) {
throw new Exception('文件大小超过限制');
}
if (!in_array($_FILES['uploadFile']['type'], ALLOWED_MIME)) {
throw new Exception('仅支持文本文件');
}
$text = file_get_contents($_FILES['uploadFile']['tmp_name']);
} else {
$text = $_POST['textInput'] ?? '';
}
// 验证输入内容
if (empty($text)) {
throw new Exception('请输入文本或上传文件');
}
// 获取分割参数
$splitType = $_POST['splitType'] ?? 'character';
$splitParam = $_POST['splitParam'] ?? '';
$outputFormat = $_POST['outputFormat'] ?? 'text';
// 执行分割操作
$output = splitText($text, $splitType, $splitParam);
// 格式化输出
$output = formatOutput($output, $outputFormat);
} catch (Exception $e) {
$error = $e->getMessage();
}
}
/**
* 文本分割函数
*/
function splitText($text, $type, $param) {
switch ($type) {
case 'character':
$chunkSize = max(1, (int)$param ?: 100);
return str_split($text, $chunkSize);
case 'line':
return explode(PHP_EOL, $text);
case 'custom':
$delimiter = empty($param) ? ',' : $param;
return explode($delimiter, $text);
case 'regex':
return preg_split('/'.$param.'/', $text, -1, PREG_SPLIT_NO_EMPTY);
default:
throw new Exception('无效的分割类型');
}
}
/**
* 格式化输出
*/
function formatOutput($data, $format) {
switch ($format) {
case 'html':
return ['<ol>'.implode('', array_map(function($item) {
return '<li>'.htmlspecialchars($item).'</li>';
}, $data)).'</ol>'];
case 'json':
return [json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)];
case 'text':
default:
return $data;
}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP文本分割器</title>
<style>
.container { max-width: 800px; margin: 20px auto; padding: 20px; }
.form-group { margin-bottom: 15px; }
.result-box { margin-top: 20px; padding: 15px; border: 1px solid #ddd; }
pre { white-space: pre-wrap; background: #f5f5f5; padding: 10px; }
</style>
</head>
<body>
<div class="container">
<h1>文本分割器</h1>
<form method="post" enctype="multipart/form-data">
<div class="form-group">
<label>输入文本:</label>
<textarea name="textInput" rows="5" style="width: 100%"><?= isset($_POST['textInput']) ? htmlspecialchars($_POST['textInput']) : '' ?></textarea>
</div>
<div class="form-group">
<label>或上传文件:</label>
<input type="file" name="uploadFile">
</div>
<div class="form-group">
<label>分割方式:</label>
<select name="splitType">
<option value="character" <?= ($_POST['splitType'] ?? '') === 'character' ? 'selected' : '' ?>>按字符数</option>
<option value="line" <?= ($_POST['splitType'] ?? '') === 'line' ? 'selected' : '' ?>>按行分割</option>
<option value="custom" <?= ($_POST['splitType'] ?? '') === 'custom' ? 'selected' : '' ?>>自定义分隔符</option>
<option value="regex" <?= ($_POST['splitType'] ?? '') === 'regex' ? 'selected' : '' ?>>正则表达式</option>
</select>
<input type="text" name="splitParam" value="<?= htmlspecialchars($_POST['splitParam'] ?? '100') ?>"
placeholder="输入参数">
</div>
<div class="form-group">
<label>输出格式:</label>
<select name="outputFormat">
<option value="text">纯文本</option>
<option value="html">HTML列表</option>
<option value="json">JSON</option>
</select>
</div>
<button type="submit">执行分割</button>
</form>
<?php if (isset($error) && $error): ?>
<div class="result-box error">
<?= htmlspecialchars($error) ?>
</div>
<?php elseif (!empty($output)): ?>
<div class="result-box">
<h3>分割结果 (共 <?= count($output) ?> 段)</h3>
<?php if ($outputFormat === 'json'): ?>
<pre><?= htmlspecialchars($output) ?></pre>
<?php else: ?>
<?php foreach ($output as $i => $segment): ?>
<div><strong>段 <?= $i+1 ?>:</strong></div>
<?php if ($outputFormat === 'html'): ?>
<?= $segment ?>
<?php else: ?>
<pre><?= htmlspecialchars($segment) ?></pre>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<div style="margin-top: 15px;">
<a href="data:text/plain;charset=utf-8,<?= urlencode(implode("\n", $output)) ?>" download="split_result.txt">
下载结果
</a>
</div>
</div>
<?php endif; ?>
</div>
</body>
<center>
@丢塔网diuta.com</center>
</html>
改了一个在wp上面的页面使用的:app.diuta.com/txt