You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP处理PokeAPI宝可梦风味文本换行异常问题求助

解决PokeAPI宝可梦图鉴文本中的软连字符与换行拆分问题

补充说明: 最终发现PokeAPI使用了软连字符(soft hyphens)。部分用户会在图鉴条目中看到连字符,部分则不会。如果下方内容里有连字符,请注意我原本看不到,最初是基于无连字符的前提处理的。


问题场景

宝可梦编号8的物种数据中,flavor-text-entries[4]的原始字符串为:

"It cleverly con­
trols its furry
ears and tail to maintain its
balance while
swimming."

尝试用PHP的str_replace([<各类\r\n数组>], " ")将文本转为单行时,能处理普通换行和换页符,但遇到特殊问题:部分换行在行尾需替换为空格,而部分换行(比如con和trols之间的换行)是软连字符导致的单词拆分,替换成空格后会把controls错误拆分为con trols,其他条目也可能存在类似情况。

解决方案

核心是区分软连字符+换行和普通换行,针对性处理:

代码实现

$rawText = '"It cleverly con­trols its furry ears and tail tomaintain its balance while swimming."';

// 1. 合并被软连字符拆分的单词:匹配软连字符+任意空白(换行/空格),直接移除
$processedText = preg_replace('/\xAD\s+/', '', $rawText);

// 2. 处理剩余普通换行、换页符,替换为单个空格
$processedText = preg_replace('/[\r\n\f]+/', ' ', $processedText);

// 可选:清理连续空格,保证文本整洁
$processedText = preg_replace('/\s+/', ' ', $processedText);

echo $processedText;
// 输出:"It cleverly controls its furry ears and tail to maintain its balance while swimming."

关键逻辑解释

  • 软连字符的Unicode编码为U+00AD,在PHP中用\xAD匹配,第一步正则直接移除软连字符及后续的空白,合并被拆分的单词。
  • 第二步统一处理剩余的换行、换页符等,保证文本转为单行。
  • 最后一步可选,用于清理处理后可能出现的连续空格。

通用扩展

如果需要处理更多不可见特殊字符,可先移除所有非必要的Unicode控制字符:

// 移除除空格、制表符外的所有Unicode控制字符
$rawText = preg_replace('/[\p{Cc}&&[^\s\t]]+/u', '', $rawText);

内容的提问来源于stack exchange,提问作者SushiKishi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:22:07