Heim >Backend-Entwicklung >PHP-Tutorial >PHP unterstützt Funktionen zum Abfangen chinesischer Zeichen für mehrere Dateikodierungen

PHP unterstützt Funktionen zum Abfangen chinesischer Zeichen für mehrere Dateikodierungen

PHP中文网
PHP中文网Original
2016-07-29 09:12:471241Durchsuche

Durch die Verwendung verschiedener Methoden zum perfekten Abfangen chinesischer Zeichenfolgen wird die UTF-8-, GBK-, GB2312- und BIG5-Kodierung ohne Installation der Erweiterungen mbstring und iconv unterstützt. Nach der Installation der oben genannten Erweiterungen werden weitere Kodierungen unterstützt Funktionsbeschreibung.
Es gibt drei Methoden
1. mb_substr() erfordert die mbstring-Erweiterung
2. Iconv_substr() erfordert die Iconv-Erweiterung
3. Drei Methoden werden von oben nach oben priorisiert unten Wenn die vorherige Methode nicht verfügbar ist, wird automatisch die nächste Methode verwendet.

Dieser Code wurde aus dem von Midnight veröffentlichten Code „String Interception, Supports Common Encodings“ optimiert.

1. Korrigieren Sie, dass mb_substr und iconv_substr im Originalcode nicht zurückgegeben werden, daher entspricht er ein ungültiger Aufruf

2. Optimieren Sie das Abfangen von Zeichenfolgensuffixen, und Sie können die Suffixe anpassen. Der Standardwert ist leer.

<?php
/**
 * 字符串截取,支持中文和其他编码
 *
 * @param string $str 需要转换的字符串
 * @param string $start 开始位置
 * @param string $length 截取长度
 * @param string $charset 编码格式
 * @param string $suffix 截断字符串后缀
 * @return string
 */
function substr_ext($str, $start=0, $length, $charset="utf-8", $suffix="")
{
    if(function_exists("mb_substr")){
         return mb_substr($str, $start, $length, $charset).$suffix;
    }
    elseif(function_exists(&#39;iconv_substr&#39;)){
         return iconv_substr($str,$start,$length,$charset).$suffix;
    }
    $re[&#39;utf-8&#39;]  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
    $re[&#39;gb2312&#39;] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
    $re[&#39;gbk&#39;]    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
    $re[&#39;big5&#39;]   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
    preg_match_all($re[$charset], $str, $match);
    $slice = join("",array_slice($match[0], $start, $length));
    return $slice.$suffix;
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn