私は正規表現に精通していないので、段落 (Wordpress での抜粋を投稿) が「by」という単語で始まっているかどうか、および「by」という単語と次の 2 つの単語に CSS クラスを適用する必要があるかどうかを識別する必要がある場合文字列をスペースで区切られた配列に分解し、配列を操作してから内破することでこれを行いました。
しかし、何か奇妙なことが起こっています。" " 区切り文字は、すべてのスペースで機能するわけではありません (また、二重スペースは使用されません)。スペース文字には複数のバージョンがありますか?
サイト全体で同じエンコーディング タイプを使用する必要があるため、スペース文字は 1 つしかありませんか?
問題のある投稿の 1 つを編集し、最初の数個のスペースを削除して新しいスペースに置き換えると、コードは正常に機能します。
私のコードは次のとおりです (多くの変数を宣言したことは知っています): 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."…";
} 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."…";
} else {
echo string_limit_words(get_the_excerpt(),16)."…";
}
編集:
現在、配列を ' ' で分解する代わりにpreg_split('|\s+|', $storySnippet)を使用していますが、まだ同じ問題が発生しています。
adovatedaily.com、ページの途中にある「意見」列の下の 3 番目のエントリに住んでいます。
編集x2:
問題のある文字列の 1 つを 16 進数に変換しました。"By Jen" は4279c2a04a656eに変換されます。そこには20がなく、余分な文字があるように見えます..何が得られますか?