("Devamı" benzer) bir veritabanından metinden bir cümle oluşturma

3 Cevap php

I <!-- break --> bulunursa o zaman sadece break önce ne olduğunu göstermek kapalı bir veritabanından metni kesmek için çalışıyorum. Şu anda bu kod var

    	//get the description before the more link
		$project_blurb =  htmlspecialchars_decode($project_data['p_desc']);
		if (strstr($project_blurb, '<!-- break -->')) {
			$project_blurb = explode("<!-- break -->" , $project_blurb);
			$project_desc = $project_blurb[0];
			}
		else{
			$project_desc = $project_blurb;
		}

Bu metin <p> etiketi ile başlar ve şu anda sitede html kırılıyor biten </p> etiketi onu kesiyorum dışında çalışır. Ben sadece "mola" önce açıklama almak için daha iyi bir yolu olup olmadığını bilmek istiyorum. Ben bize strip_tags denedim ama bu da ben aramak gerekir yorum şeritler ve bazı çirkin biçimlendirme oluşturur.

Teşekkürler

3 Cevap

Eğer mola kadar seçmek gerekiyorsa alanı aldıktan sonra, şerit etiketleri diyoruz. Ayrıca, yalnızca bir kez mola arayarak biraz daha verimli yapabilirsiniz:

<?
$project_blurb = htmlspecialchars_decode($project_data['p_desc']);
if (($pos = strpos('<!-- break -->'), $project_blurb) >= 0) {
  $project_desc = substr(0, $pos);
} else {
  $project_desc = $project_blurb;
}
$project_desc = strip_tags($project_desc);
?>

Bunun yerine metinde özel bir yorum koyarak, açıklamanızda için maksimum uzunluğunu tanımlayan düşünün, böylece dize aramak zorunda değilsiniz. Bu çok daha verimli olacak ve giriş defterini gerekmez.

Yerine yerde genişleyen, sayfanızdan tam metnine link gidiyor iseniz, ayrıca veritabanı sizin için bazı iş yapmasına izin düşünebiliriz. MySQL kullanıyorsanız varsayarsak, LEFT(p_desc, 200) p_desc alanından veritabanı sadece ilk 200 karakteri çekmek için kullanabilirsiniz.

Ben ile geldi bir çözüm jheddings yöntemine benzer.

Ben onun senaryoyu yukarı düzeltti ve ben burada bulunan bir kod parçacığını kullanılır

Snipplr Close Tags In A HTML Snippet

Açık etiketleri bulmak ve (ben gerçekten sadece p kapatma etiketleri umurumda varsayarak yaşıyorum unutmayın) onları kapatmak için

Not: işim ile çalışıyordu örneğin halletmek için pasajı eksikleri olabilir ama o başardı

Bu yüzden aşağıda örnek komut ben örnek cümle mola işareti sonra her şeyi kesme ve ekleme alıyorum ... "" ona. Sonra p etiketlerinin dışında her şeyi strip_tag. Sonra tüm etiketleri maç ve eşsiz olan herhangi kapatmak için closetags fonksiyonunu kullanıyorum.

Bu temiz uzak ama veri seti yeteri kadar basit ise bu konuda gitmek için hızlı bir yol olabilir.

<?php
$project_blurb = "<p>This is a blurb with content</p><p>This is another<!-- break -->blurb</p>"; 

if ($pos = strpos($project_blurb, '<!-- break -->')) {
    $project_desc = substr($project_blurb, 0, $pos)."...";
} else {
    $project_desc = $project_blurb;
}

$project_desc = strip_tags($project_desc, '<p>');
$project_desc = closetags($project_desc);

echo $project_desc;

function closetags ( $html )
{
    #put all opened tags into an array
    preg_match_all ( "#<([a-z]+)( .*)?(?!/)>#iU", $html, $result );
    $openedtags = $result[1];

    #put all closed tags into an array
    preg_match_all ( "#</([a-z]+)>#iU", $html, $result );
    $closedtags = $result[1];
    $len_opened = count ( $openedtags );
    # all tags are closed
    if( count ( $closedtags ) == $len_opened )
    {
        return $html;
    }
    $openedtags = array_reverse ( $openedtags );
    # close tags
    for( $i = 0; $i < $len_opened; $i++ )
    {
        if ( !in_array ( $openedtags[$i], $closedtags ) )
        {
            $html .= "</" . $openedtags[$i] . ">";
        }
        else
        {
            unset ( $closedtags[array_search ( $openedtags[$i], $closedtags)] );
        }
    }
    return $html;
}

?>

Siz her şeyi yanlış yapıyorsun!

O yüzden bu i bunu nasıl DB fromt Geliyor:

SELECT SUBSTR(description, 1, INSTR(description, '<!-- break -->') -1);

Neden açıkça zor programlama dilleri / w yapmak??

Demo!

CREATE TEMPORARY TABLE foo (description text);
INSERT INTO foo VALUES ('This is a really long paragraph. <!-- break --> OK, not really ;-)');
SELECT SUBSTRING(description, 1, INSTR(description, '<!-- break -->') - 1) AS description FROM foo;
// Output: This is a really long paragraph.