Tutoriels associés recommandés : Tutoriel du framework thinkphp
ThinkPHP a une fonction d'interception de caractères intégrée msubstr () Comme suit :
msubstr($str, $start=0, $length, $charset=”utf-8″, $suffix=true)
$str : la chaîne à intercepter
$start=0 : position de départ, en commençant de 0 par par défaut
$length : longueur d'interception
$charset="utf-8″ : encodage de caractères, UTF-8 par défaut
$suffix=true : Indique s'il faut afficher une ellipse après le caractère intercepté. La valeur par défaut est true pour afficher, false pour ne pas afficher.
est appelé comme. suit l'explication
{$vo.title|msubstr=5,5,’utf-8′,false}
: Interceptez la chaîne $vo.title, à partir du 5ème caractère, interceptez 5 caractères, encodez-la en UTF-8 et n'affichez pas les points de suspension
Récemment, lorsque en écrivant un programme avec thinkphp, j'ai rencontré une erreur du type Call to undefined function msubstr()
,
Analyse des causes :
La fonction msubstr|msubstr=###,5,5, 'utf-8',false est utilisé dans le modèle frontal Intercepter le nombre de caractères
Le problème se produit :
Quand j'ai commencé à écrire localement, le Le système d'exploitation Windows n'a pas signalé d'erreur. Plus tard, lorsque j'ai téléchargé le projet sur le serveur Linux, il a signalé une erreur lors de l'accès à la réception. Erreur d'appel à la fonction msubstr() ; :
J'ai commencé à voir des amis publier sur le site officiel de Think qu'ils devaient être sous la bibliothèque de fonctions publiques. Définissez cette fonction ; la fonction est la suivante :
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=false){ if(function_exists("mb_substr")){ if($suffix) return mb_substr($str, $start, $length, $charset)."..."; else return mb_substr($str, $start, $length, $charset); }elseif(function_exists('iconv_substr')) { if($suffix) return iconv_substr($str,$start,$length,$charset)."..."; else return iconv_substr($str,$start,$length,$charset); } $re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/"; $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/"; $re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/"; $re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/"; preg_match_all($re[$charset], $str, $match); $slice = join("",array_slice($match[0], $start, $length)); if($suffix) return $slice."…"; return $slice; }Après cela ; est défini, il peut être utilisé localement ; j'ai également vu des amis dire que placer cette fonction sous le fichier de fonction principale de Thinkphp peut résoudre le problème de l'appel à une fonction non définie msubstr(). Lors du signalement d'une erreur, il est indiqué qu'elle n'est pas valide si je le fais. placez-le sous common.php dans le répertoire Common de mon projet, mais je ne souhaite pas modifier les fichiers principaux de Think pour faciliter les futures mises à niveau
Solution :
C'est toujours un problème de dossier sous Linx. Après une inspection minutieuse, j'ai découvert que puisque le projet ne générera pas automatiquement common.php, il doit être construit manuellement. Il s'avère que j'ai écrit le C dans common.php sous Common. sous le projet local en majuscules, puis coché Le C dans common.php sous le noyau officiel Common est en minuscules. Finalement, le problème a été résolu en le changeant en minuscules
Enregistrez-le pour éviter de commettre des erreurs aussi mineures à l'avenir ! Pour plus de connaissances sur la programmation, veuillez visiter :Introduction à la programmation
! !Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!