Windows控制台SQLite与CGI网站中带换行文本的存储处理问题
解决方案
核心思路是将解码后的文本按换行符分割为段落(包括空段落),给每个段落加上单引号(同时转义段落内的单引号),再用|| char(10) ||连接所有段落。这种方式天然支持连续换行的场景,因为连续换行会产生空段落,最终生成符合要求的格式。
修改后的script.cmd中的PowerShell命令如下:
powershell.exe -noprofile "Add-Type -AssemblyName System.Web; $decoded = [System.Web.HttpUtility]::UrlDecode($Input); $lines = $decoded -split '\r?\n'; $quotedLines = $lines | ForEach-Object { '''' + ($_ -replace '''', '''''') + '''' }; $joined = $quotedLines -join ' || char(10) || '; Write-Output $joined"
代码说明
- URL解码:使用
[System.Web.HttpUtility]::UrlDecode处理POST传入的编码文本。 - 分割段落:用
-split '\r?\n'分割文本,同时兼容Windows(\r\n)和Unix(\n)换行格式。 - 转义与加引号:对每个段落,将单引号替换为两个单引号(SQLite的转义规则),再包裹在单引号中。
- 连接段落:用
|| char(10) ||连接所有带引号的段落,生成符合SQLite插入语法的字符串。
示例验证
- 输入文本:
Hello\r\nworld→ 输出:'Hello' || char(10) || 'world' - 输入文本:
line1\r\n\r\nline2→ 输出:'line1' || char(10) || '' || char(10) || 'line2'(连续换行生成了正确的|| char(10) || char(10) ||片段) - 输入文本:
带'单引号'的行\r\n另一行→ 输出:'带''单引号''的行' || char(10) || '另一行'(单引号已正确转义)
内容的提问来源于stack exchange,提问作者user2956477
相关产品推荐
相关产品推荐

