Hileler ele php string [kapalı]

2 Cevap

Verilen metin için sonra 10 sözcük öncesi ve 10 kelime almak gerekiyor. i anahtar önce 10 kelime başlangıç ​​ve anahtar kelimesinden sonra 10 kelime ile bitirmek gerekir anlamına gelir.

Verilen metni: "Yirmi üç"

Asıl hüner: Bazı html etiketleri vb sahip içerik .. etiketleri yalnızca bu içerik ile bu etiketi tutmak gerekir. 10before gelen kelimeleri görüntülemek gerekir - 10after

içerik körüktür:

removed

Teşekkür ederim

2 Cevap

Bu yöntem kelime sadece boşluk (değil sekmeler, satırsonlarının veya başka boşlukla) tarafından ayrılır varsayar ve muhtemelen (benim deneyim kötü bir varsayım) iyi biçimli HTML varsayar PHP kütüphane işlevi "strip etiketleri" bağlıdır.

$string_content = strip_tags($html_content);
$start_cursor = $end_cursor = strpos($string_content, 'Twenty-three');
for($i = 0; $i < 10; $i++) { // rewind backwards until we find 10 spaces
    $start_cursor = strrpos($string_content, ' ', $start_cursor);
}
for($i = 0; $i <= 10; $i++) { // skip forward until we find eleven spaces 
    $end_cursor = strpos($string_content, ' ', $end_cursor);
}
$result_string = substr($string_content, $start_cursor, $end_cursor - $start_cursor);

denenmemiş ama etkili bir yaklaşım olduğuna inanıyorum

isteğe bağlı, Eğer boşluk sterilize edebilirsiniz:

$string_content = strip_tags($html_content);
$string_content = preg_replace("/\s+/", " ", $string_content); // replace any number of adjacent whitespace characters with a single space

Bu hile yapmak gerekir:

function getSurrounding($string, $needle){
  // Strip html tags
  $string = strip_tags($string);
  // Concat blank characters
  $string = preg_replace('`\\s+`', ' ', $string);
  // Use some regexp magic
  preg_match_all('`(?:[^ ]+ ){10}'.$needle.'(?: [^ ]+){10}`', $string, $blocks);
  return $blocks[0];
}