PHP处理PokeAPI宝可梦风味文本换行异常问题求助
解决PokeAPI宝可梦图鉴文本中的软连字符与换行拆分问题
补充说明: 最终发现PokeAPI使用了软连字符(soft hyphens)。部分用户会在图鉴条目中看到连字符,部分则不会。如果下方内容里有连字符,请注意我原本看不到,最初是基于无连字符的前提处理的。
问题场景
宝可梦编号8的物种数据中,flavor-text-entries[4]的原始字符串为:
"It cleverly con
trols its furry
ears and tail tomaintain its
balance while
swimming."
尝试用PHP的str_replace([<各类\r\n数组>], " ")将文本转为单行时,能处理普通换行和换页符,但遇到特殊问题:部分换行在行尾需替换为空格,而部分换行(比如con和trols之间的换行)是软连字符导致的单词拆分,替换成空格后会把controls错误拆分为con trols,其他条目也可能存在类似情况。
解决方案
核心是区分软连字符+换行和普通换行,针对性处理:
代码实现
$rawText = '"It cleverly controls its furry ears and tail tomaintain 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
相关产品推荐
相关产品推荐

