Strlen не дает правильного вывода

У меня есть строка, которую я извлекаю из базы данных, я хочу рассчитать длину строки без пробелов, но она отображает большее значение длины (на 21 символ больше фактического количества). Я удалил символы табуляции и новой строки, а также php и html, но безрезультатно! Я перепробовал почти все функции в справочнике php w3schools, но не смог добиться успеха. Я также заметил, что если я не извлеку значение из базы данных и не введу его следующим образом:

$string = "my string";

Я получаю правильную длину, пожалуйста, помогите мне. Вот код:

if($res_tutor[0]['tutor_experience']){
        $str = trim(strip_tags($res_tutor[0]['tutor_experience']));
            $str = $this->real_string($str);
            $space = substr_count($str, ' ');
            $experience  = strlen($str) -  $space;


function real_string($str)
{
    $search  = array("\t","\n","\r\n","\0","\v");
    $replace = array('','','','','');
    $str = str_replace($search,$replace,$str);
    return $str;
}

И это строка из базы данных, но, как вы можете видеть выше, я удалил все теги php и html, используя strip_tags():

<span class=\"experience_font\">You are encouraged to write a short description of yourself, teaching experience and teaching method. You may use the guidelines below to assist you in your writing.<br />
   <br />
   .Years of teaching experience<br />
   .Total number of students taught<br />
   .Levels &amp; subjects that you have taught<br />
   .The improvements that your students have made<br />
   .Other achievements/experience (Relief teaching, a tutor in a tuition centre, Dean&#39;s list, scholarship, public speaking etc.)<br />
   .For Music (Gigs at Esplanade, Your performances in various locations etc.)</span><br />
   &nbsp;</p>

и когда я печатаю его, он отображается как:

<span class=\"experience_font\">You are encouraged to write a short description of yourself, teaching experience and teaching method. You may use the guidelines below to assist you in your writing.<br />
   <br />
   .Years of teaching experience<br />
   .Total number of students taught<br />
   .Levels &amp; subjects that you have taught<br />
   .The improvements that your students have made<br />
   .Other achievements/experience (Relief teaching, a tutor in a tuition centre, Dean&#39;s list, scholarship, public speaking etc.)<br />
   .For Music (Gigs at Esplanade, Your performances in various locations etc.)</span><br />
   &nbsp;</p>

person irohit786    schedule 31.10.2012    source источник
comment
Если вы просматриваете это в браузере, убедитесь, что там нет html-тегов и тому подобного. То, что вы не ВИДИТЕ дополнительных символов, очень мало значит.   -  person Marc B    schedule 31.10.2012
comment
были лишние теги, и я удалил использование strip_tags()   -  person irohit786    schedule 31.10.2012
comment
я не понимаю ... я запустил ваш код с введенными вами данными, и он работает нормально для меня. это должно быть связано с тем, что вы получили от БД... вам нужно добавить больше кода, попытаться скопировать текст из БД напрямую или что-то подобное.   -  person hummingBird    schedule 31.10.2012
comment
да, это связано с базой данных, строка, поступающая из базы данных, ведет себя так, и когда я печатаю ее, вывод соответствует строке, которую я дал в вопросе выше. текст в базе данных такой, как вставлен выше   -  person irohit786    schedule 02.11.2012


Ответы (2)


@Svetilo, не хочу быть грубым, просто хотел опубликовать свои выводы, ваш str_replace работал прекрасно, за исключением того факта, что я все еще выводил с ним неверные значения в том порядке, в котором вы сейчас имеете, я обнаружил, что следующее работает безупречно.

$string = str_replace(array("\t","\r\n","\n","\0","\v"," "),'', $string);
mb_strlen($string, "UTF-8");

Изменение вокруг \r\n & \n заставило str_replace не удалять \n из \r\n, оставив его просто \r.

Ваше здоровье.

person Sam J. Dennis    schedule 02.01.2013

Попробуйте использовать mb_strlen. http://php.net/manual/en/function.mb-strlen.php Более точно.

mb_strlen($str,"UTF-8") 

Где UTF-8 - ваша кодировка по умолчанию... Чтобы удалить все свободные места, попробуйте что-то вроде этого.

 $string = str_replace(array("\t","\n","\r\n","\0","\v"," "),"",$string);
 mb_strlen($string, "UTF-8");
person Svetoslav    schedule 31.10.2012
comment
извините, не работает, тот же результат! и моя кодировка - ASCII, спасибо, да, братан, я пробовал это выше. - person irohit786; 31.10.2012