PHP Substr Function Trimming Problem [duplicate]

2019-07-31 22:55发布

问题:

This question already has an answer here:

  • Why my php substr() shows obscure characters when cutting a text? 4 answers

I'm using below code for triming titles and show it recent posts section on my blog:

<?php global $post;
$releaseDate = get_post_meta($post->ID, "gosterim_tarihi", true);
foreach( $images as $image ) {
    $title = get_the_title();
    if (strlen($title) > 20) { $title = substr($title, 0, 20) . '&hellip;'; }
    $attachmentimage=wp_get_attachment_image_src( $image->ID, 'large' );
    echo '<li><a href="'. get_permalink() .'" title="' . $title . '"><img src="'. $attachmentimage[0] .'" alt="'. $title .'" />'. $title .'<span>Gösterim Tarihi: ' . $releaseDate . '</span></a></li>';
} ?>

But there are problem with HTML character entities. When i use substr function for trim a title, substr function trimming HTML character entities too.

So i tried to use html_entity_decode function but i can't do it very well.

Anyone can help me?

回答1:

Try this:

$output = htmlentities(substr(html_entity_decode($input), 0, 20));

This will decode all entities so substr won't break anything. After that you can encode all characters back to their entities.



回答2:

I think you can use the strip_tags function there eg:

substr(strip_tags($title), 0, 20);

This will deal only with the title excluding any html chars.



回答3:

Use This Function

<?php
  function keephtml($string){
          $res = htmlentities($string);
          $res = str_replace("&lt;","<",$res);
          $res = str_replace("&gt;",">",$res);
          $res = str_replace("&quot;",'"',$res);
          $res = str_replace("&amp;",'&',$res);
          return $res;
}
?>


回答4:

It would be cleaner if you can leave the html-encoding until the last minute, e.g. when you actually echo the $title string. Of course, that means you have to remember to encode all the strings yourself.