J'ai un petit soucis aujourd'hui...
Je cherche à faire une fonction à l'instar de substr(), mais qui ne me couperais pas les mots en deux...
donc pour l'instant j'ai ceci:
function mySubstr($c,$s,$l){
if(!preg_match('#\s#',$c[$s+$l])){ //si on est pas sur un espace, une tabulation ou un retour à la ligne
$l=(mb_strpos($c,' ',$s+l)-$s); //utilisation de mb_strpos, car j'ai des caractères utf8
//on cherche le prochaine espace, et on change la longueur...
}
return mb_substr($c,$s$l);
}Mon problème vient du fait que mb_strpos() ne veut pas reconnaitre des retours chariots ou des tabulationEt j'aimerais éviter d'avoir trop affaire aux PCRE, donc si vous aviez une idée
Merci d'avance!!
Alors j'ai avancé, et en fait j'ai réussit à reconnaitre les \net \r\n, il fallait entourer des doubles quotes, donc j'arrive à ceci:
function mySubstr($c,$s,$l){
//si le caractère n'est pas un espace ou un saut de ligne, on cherche le suivant
if($c[$s+$l]!==" " || $c[$s+$l]!=="\n" || $c[$s+$l]!=="\r\n"){
//on cherche les prochaines position pour chaque type de caractère "blanc"
if(mb_strpos($c," ",$s+$l)!==false)
$res[]=mb_strpos($c," ",$s+$l)-$s;
if(mb_strpos($c,"\n",$s+$l)!==false)
$res[]=mb_strpos($c,"\n",$s+$l)-$s;
if(mb_strpos($c,"\r\n",$s+$l)!==false)
$res[]=mb_strpos($c,"\r\n",$s+$l)-$s;
//enfin on prend le plus proche caractère "blanc" pour couper
$l=min($res);
}
return mb_substr($c,$s,$l);
}ça fonctionne nickel, mais je trouve un peu lourd de devoir faire le test [gras]!==false[/gras] à chaque fois, ça exécute deux fois mb_strpos, vous auriez une solution pour alléger un peu ça?