1

我不精通正则表达式,所以当我需要确定一个段落(Wordpress 中的摘录)是否以单词“by”开头以及是否确实将 CSS 类应用于单词“by”和接下来的两个单词时我通过将字符串分解为由空格分隔的数组、操作数组然后将其分解来做到这一点。

不过有些奇怪的事情正在发生。" " 分隔符不适用于所有空格(并且没有使用双空格)。那里有多个版本的空格字符吗?

我的整个网站不应该具有相同的编码类型,因此只有一个空格字符吗?

如果我编辑其中一个问题帖子并删除前几个空格并用新空格替换它们,则代码可以正常工作。

我的代码如下(我知道我声明了很多变量): elseif{ 下的部分具体是我所描述的,但我粘贴了整个条件块以供参考。

$byLine = strtolower(string_limit_words(get_the_excerpt(),1));
$storySnippet = string_limit_words(get_the_excerpt(),16);
$storyExplode = explode(' ', $storySnippet);

if (($byLine=="by") && strtolower($storyExplode[3])=="and") {
    $storySlice = array_slice($storyExplode, 6);
    $storyLast = implode(' ', $storySlice); ?>
    <a href="<?php the_permalink(); ?>" class="byline">
    <?php echo string_limit_words(get_the_excerpt(),6); ?></a>
    <?php echo "  ".$storyLast."&hellip;";

} elseif ($byLine=="by") {
    $storySlice = array_slice($storyExplode, 3);
    $storyLast = implode(' ', $storySlice); ?>
    <a href="<?php the_permalink(); ?>" style="color:#888;font-style:italic;font-size:90%;">
    <?php echo string_limit_words(get_the_excerpt(),3); ?></a>
    <?php echo"  ".$storyLast."&hellip;";

}  else { 
    echo string_limit_words(get_the_excerpt(),16)."&hellip;"; 
}

编辑:

目前使用preg_split('|\s+|', $storySnippet)而不是用''爆炸数组,但我仍然遇到同样的问题。

住在adovatedai​​ly.com,页面中间“意见”栏下的第三个条目

编辑x2:

将问题字符串之一转换为十六进制。“由 Jen”转换为4279c2a04a656e。那里没有20 个,而且似乎有一个额外的字符.. 是什么给出的?

4

2 回答 2

2

感谢评论,我发现导致问题的空间是非中断空间(十六进制的 c2a0)。

我使用下面的行成功地将字符串的空格替换为常规空格,从而解决了问题。

$spacedExcerpt = preg_replace('/\xC2\xA0/', ' ', get_the_excerpt());
于 2013-05-09T18:11:25.237 回答
1

您可以使用:

preg_split('|\s+|', $storySnippet);

它匹配任何空白字符。+ 也处理双(三...)空格。

于 2013-05-09T15:37:03.900 回答