функцията substr и валидацията и в V3

vankata

Registered
Значи имам едно блогче и си поствам новини там. Ползвам substr за съкращаване на постовете но проблема идва там че като ползвам bbcodes и когато линка бъде
Код:
[url=http://site.com]site.com[/url]
го прави така
Код:
<a href="http://site.com">site.com</a>
и substr го съкращава понякога
Код:
<a href="ht
и до там и не е верно при валидацията примерно има ли начин да стане
Код:
<a href="http://site.com">sit...</a>
за да може валидацията да минава?
substr да не съкращава таговете а само това което има в тях
 
Извинявам се че пиша 2ри пост един след друг, просто намерих решение на проблема си и искам да го споделя с останалите. Ако някой друг се сблъска със същия или подобен проблем да намери темата и да му влезе в полза. 2рия пост е за по нагледно и четливо съдържание

ето и функцията която извършва това

Код:
function html_substr($posttext, $minimum_length = 200, $length_offset = 0, $cut_words = TRUE, $dots = TRUE) {
  
    // $minimum_length:
    // The approximate length you want the concatenated text to be  
 

    // $length_offset:
    // The variation in how long the text can be in this example text
    // length will be between 200 and 200-20=180 characters and the
    // character where the last tag ends

    // Reset tag counter & quote checker
    $tag_counter = 0;
    $quotes_on = FALSE;
    // Check if the text is too long
    if (strlen($posttext) > $minimum_length) {
        // Reset the tag_counter and pass through (part of) the entire text
        $c = 0;
        for ($i = 0; $i < strlen($posttext); $i++) {
            // Load the current character and the next one
            // if the string has not arrived at the last character
            $current_char = substr($posttext,$i,1);
            if ($i < strlen($posttext) - 1) {
                $next_char = substr($posttext,$i + 1,1);
            }
            else {
                $next_char = "";
            }
            // First check if quotes are on
            if (!$quotes_on) {
                // Check if it's a tag
                // On a "<" add 3 if it's an opening tag (like <a href...)
                // or add only 1 if it's an ending tag (like </a>)
                if ($current_char == '<') {
                    if ($next_char == '/') {
                        $tag_counter += 1;
                    }
                    else {
                        $tag_counter += 3;
                    }
                }
                // Slash signifies an ending (like </a> or ... />)
                // substract 2
                if ($current_char == '/' && $tag_counter <> 0) $tag_counter -= 2;
                // On a ">" substract 1
                if ($current_char == '>') $tag_counter -= 1;
                // If quotes are encountered, start ignoring the tags
                // (for directory slashes)
                if ($current_char == '"') $quotes_on = TRUE;
            }
            else {
                // IF quotes are encountered again, turn it back off
                if ($current_char == '"') $quotes_on = FALSE;
            }
          
            // Count only the chars outside html tags
            if($tag_counter == 2 || $tag_counter == 0){
                $c++;
            }          
                          
            // Check if the counter has reached the minimum length yet,
            // then wait for the tag_counter to become 0, and chop the string there
            if ($c > $minimum_length - $length_offset && $tag_counter == 0 && ($next_char == ' ' || $cut_words == TRUE)) {
                $posttext = substr($posttext,0,$i + 1);              
                if($dots){
                   $posttext .= '...';
                }
                return $posttext;
            }
        }
    }  
    return $posttext;
}

и я викаме със html_substr($string) където $string e съдържанието вече филтрирано при изход от дб-то просто вместо substr заместваме със html_substr и горе на min_length пишем до колко символа да бъде текста съкратен /не съкращава таговете/
 

Back
Горе