PHP işlevi substr () sorunu

7 Cevap php

Ben kullandığınızda substr() Ben sonunda garip bir karakter olsun

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

Ben 500 karakter bir çıkış var ve <-

Bu nasıl iIfix olabilir? Bir kodlama sorunu mudur? Benim dil Yunan.

7 Cevap

Kullan mb_substr instead, it is able to deal with multiple encodings, not only single-byte strings as substr :

$articleText = mb_substr($articleText,0,500,'UTF-8');

Orada yarısında unicode karakter dilimleme gibi görünüyor. Kullan mb_substr yerine unicode-güvenli dize dilimleme için.

Ben kontrol mb_substr(), bazı durumlarda ben var

ama kodlama ekleyerek substr() kullanarak tüm durumlarda çalışır!

$articleText = substr($articleText,0,500,'UTF-8');

UTF-8 kodlanmış dizeleri için alternatif çözüm - bu alt dize kesmeden önce karakter UTF-8 çevirecektir.

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

Geri UTF-8 articleText dize almak için, bir ekstra işlem gerekli olacaktır:

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

ms_substr () Ayrıca ben html kodunu ayrıştırma sonra sorun yaşıyorsanız hangi yanı sonları garip firar hattı kaldırılması için mükemmel çalışıyor. Sorun tarafından ele DEĞİLDİ:

 trim() 

veya:

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

veya:

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

Tutmazsan.

Bu fonksiyonu kullanmak, Bu benim için çalıştı

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