web-dev-qa-db-ja.com

PHP function substr()エラー

substr()を使用すると、最後に奇妙な文字が表示されます

$articleText = substr($articleText,0,500);

500文字の出力があります。<-

どうすればこれを修正できますか?エンコーディングの問題ですか?私の言語はギリシャ語です。

24
Stoikidis

substr は、文字ではなくバイトを使用してカウントしています。

ギリシャ語はおそらく、UTF-8などのマルチバイトエンコーディングを使用していることを意味します。バイトごとのカウントは、それらにはあまり適していません。

多分 mb_substr 役立つかもしれません、ここで: mb_* 関数はマルチバイトエンコーディング専用に作成されています。

57
Pascal MARTIN

使用する - mb_substr 代わりに、シングルバイト文字列だけでなく、複数のエンコーディングを処理できます substr

$articleText = mb_substr($articleText,0,500,'UTF-8');
19
Uğur Özpınar

ユニコード文字を半分にスライスしているようです。使用する - mb_substr 代わりにUnicodeで安全な文字列スライス。

6
deceze

UTF-8でエンコードされた文字列の代替ソリューション-これにより、部分文字列をカットする前にUTF-8が文字に変換されます。

$articleText = substr(utf8_decode($articleText),0,500);

ArticleText文字列をUTF-8に戻すには、追加の操作が必要になります。

$articleText = utf8_encode( substr(utf8_decode($articleText),0,500) );
1

この機能を使用して、それは私のために働いた

function substr_unicode($str, $s, $l = null) {
    return join("", array_slice(
        preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
}

クレジット: http://php.net/manual/en/function.mb-substr.php#107698

1
Moussawi7

ms_substr()は、htmlコードの解析後に問題が発生した奇妙な末尾の改行も削除するのに最適です。問題は次の人によって処理されませんでした:

 trim() 

または:

 var_dump(preg_match('/^\n|\n$/', $variable));

または:

str_replace (array('\r\n', '\n', '\r'), ' ', $text)

捕まらないでください。

0
Dr Nick Engerer

あなたはユニコード文字を切り取ろうとしているので、phpでsubstr()の代わりにmb_substr()を試してみてください。

substr()

substr ( string $string , int $start [, int $length ] )

mb_substr()

mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

Substr()の詳細について- クレジット=>ここをチェック

0
GowriShankar