-1

データベースから取得した文字列があり、スペースなしで文字列の長さを計算したいのですが、より大きな長さの値 (実際の数よりも 21 文字大きい) が表示されています。タブと改行文字を削除し、 php と html のタグがありますが、結果はありません! w3schools php リファレンスのほぼすべての機能を試しましたが、成功するものは見つかりませんでした。また、データベースから値を取得せず、次のように入力した場合も観察しました。

$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>
4

2 に答える 2

4

@Svetilo、失礼ではありませんが、私の調査結果を投稿したかっただけです。str_replace は素晴らしく機能しましたが、現在の順序で間違った値をまだ出力していたという事実を除いて、次のことが問題なく機能することがわかりました。

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

\r\n と \n を変更すると、str_replace は \r\n から \n を取り除かず、\r だけを残しました。

乾杯。

于 2013-01-02T10:00:16.850 に答える
3

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");
于 2012-10-31T14:14:33.750 に答える