Почему мой php substr () показывает неясные символы при разрезании текста?

Я использую функцию substr() для ограничения символов в строках. но иногда текст вывода содержит некоторые неясные символы и вопросительные знаки и т. д. …

текст, который является «субстратом», уже закодирован в кодировке UTF8, а НЕ в html-объектах, чтобы сделать подобную проблему.

благодаря

Потому что вы сокращаете своих персонажей на половину.

Используйте mb_substr для многобайтовых кодировок символов, таких как UTF-8. substr просто подсчитывает байты, в то время как mb_substr подсчитывает символы.

Причина в том, что вы используете UTF-8, это многобайтовая кодировка, а substr () работает только с одним байтом! htmlentities () не имеет значения.

Вы ДОЛЖНЫ использовать mb_substr () http://php.net/manual/en/function.mb-substr.php и другие многобайтовые функции

Просто для продления Гурмбо есть ответ. Использование mb_substr решит вашу проблему, но, если специальные символы приходят в конце при поездке, все равно отображаются некоторые специальные символы. Поэтому, когда я сделал какое-то исследование, WordPress имел метод wp_html_excerpt для решения этой проблемы.

Метод wp_html_excerpt удаляет эти специальные символы из конца строки.

Вот исходный код WordPress.

 /** * Safely extracts not more than the first $count characters from html string. * * UTF-8, tags and entities safe prefix extraction. Entities inside will *NOT* * be counted as one character. For example & will be counted as 4, < as * 3, etc. * * @since 2.5.0 * * @param string $str String to get the excerpt from. * @param int $count Maximum number of characters to take. * @param string $more Optional. What to append if $str needs to be trimmed. Defaults to empty string. * @return string The excerpt. */ function wp_html_excerpt( $str, $count, $more = null ) { if ( null === $more ) $more = ''; $str = wp_strip_all_tags( $str, true ); $excerpt = mb_substr( $str, 0, $count ); // remove part of an entity at the end $excerpt = preg_replace( '/&[^;\s]{0,6}$/', '', $excerpt ); if ( $str != $excerpt ) $excerpt = trim( $excerpt ) . $more; return $excerpt; } 

Если у вас проблемы с кодировкой, вы также можете применить функцию html_entity_decode (), которая преобразует все объекты HTML в соответствующие символы. Например:

 echo substr(html_entity_decode($string_to_cut), 0, 28) . "..."; 

Это также должно сработать.