HTML etiketleri ile, her kelimenin ilk harfi kapsayacak nasıl?

5 Cevap php

HTML etiketleri ile, her kelimenin ilk harfi kapsayacak nasıl?

Örneğin:

$string = replace_first_word("some simple text",'<big>{L}</big>');
echo $string; //returns: <big>s</big>ome <big>s</big>imple <big>t</big>ext

edit: ohhh, forgot to mention one important point, it Needs to work with UTF-8 Unicode... because I'm planning to support both Russian and English with this.

5 Cevap

Bu deneyin:

$string = preg_replace('/(?:^|\b)(\p{L})(\p{L}*)/u', '<big>$1</big>$2', 'some simple words');

Ya da bir fonksiyon isterseniz:

function replace_first_word($str, $format) {
    return preg_replace('/(?:^|\b)(\p{L})(\p{L}*)/u', str_replace('{L}', '$1', $format).'$2', $str);
}

Standart uyarı: Eğer tam bir çözüm gerekiyorsa, metin düğümleri HTML ayrıştırmak ve sonra işlemek yüzden doğru vb dışarıdan vs yuvalama, içerik iç etiketleri, işlemek için imkansız yanında çünkü regexes ile HTML manipüle kötü bir fikirdir.

Verdiğin bu psecific örnekte, bunu yapmak gerekir.

$output = preg_replace('!\b([a-zA-Z])!`, '<big>$1</big>`, $input);

Bu sıfır genişliği olan (\b) bir kelime sınır bulmak ve bir <big> öğesi aşağıdaki mektubu sarın demektir.

Sen CSS özelliğini kullanabilirsiniz

p { text-transform: capitalize; }

Dan Sitepoint's CSS reference on text-transform:

yararlanmak

  • büyük harfe her kelimenin ilk karakteri dönüştürür; Onlar küçük harfe dönüştürülmüş değil, ama belgede yazıldığı gibi görünür - tüm diğer karakterler bundan etkilenmez

i ne gerek düşünüyorum

preg_replace('~(?<=\p{^L}|^)\p{L}~u', '<big>$0</big>', $input);

\ b utf8 ile düzgün çalışmıyor unutmayın.

Burada utf-8 multibyte karakterleri destekler ben sadece kendim öğrendim daha iyi ve muhtemelen daha hızlı versiyonudur.

benim deneyim regex fonksiyonları php yavaş, bu yüzden burada bir dize işleme tabanlı bir fonksiyonudur.

function replace_first_word($text,$format='<big>{L}</big>'){
 //*** UTF-8 replace first letter of every word ***
 //split words
 $words = explode(' ', $text);
 //pick up each word
 foreach($words as &$word){
  //find out first letter of word
  $first = substr($word, 0,1);
  //remove first letter from word
  $word = substr($word,1);
  //replace first letter with formatted letter
  $first = str_replace('{L}',$first,$format);
  //add replaced letter to word
  $word = $first.$word;
 }
 //glue words back together and return them
    return implode(' ',$words);
}

PHP6 çıkar da önce, daha iyi destek utf-8'e php.ini bu 2 değişkenleri ayarlamak için hatırlıyorum

mbstring.func_overload "7"
mbstring.internal_encoding "UTF-8"