Takzže pozerám do kódu - toto je verzia,ktorá je NESPRÁVNA - nemám čťas to testovať, no spôsob použitia $str{$i} je pre multibyte stringy nevhodný.
// nahrada za wordwrap, ktory rozsekava dlhe URL, cim znefunkcni odkazy
function breakLongWords($str, $maxLength, $char){
$wordEndChars = array(" ", "\n", "\r", "\f", "\v", "\0");
$count = 0;
$newStr = "";
$openTag = false;
for($i=0; $i<mb_strlen($str); $i++){
$newStr .= $str{$i};
if($str{$i} == "<"){
$openTag = true;
continue;
}
if(($openTag) && ($str{$i} == ">")){
$openTag = false;
continue;
}
if(!$openTag){
if(!in_array($str{$i}, $wordEndChars)){
$count++;
if($count==$maxLength){
$newStr .= $char;
$count = 0;
}
}else{
$count = 0;
}
}
}//End for
return $newStr;
}
funckcia by mala vyzerať takto:
// nahrada za wordwrap, ktory rozsekava dlhe URL, cim znefunkcni odkazy
function breakLongWords($str, $maxLength, $char){
$wordEndChars = array(" ", "\n", "\r", "\f", "\v", "\0");
$count = 0;
$newStr = "";
$openTag = false;
for($i=0; $i<mb_strlen($str); $i++){
$curLtr = mb_substr($str, $i, 1);
$newStr .= $curLtr;
if($curLtr == "<"){
$openTag = true;
continue;
}
if(($openTag) && ($curLtr == ">")){
$openTag = false;
continue;
}
if(!$openTag){
if(!in_array($curLtr, $wordEndChars)){
$count++;
if($count==$maxLength){
$newStr .= $char;
$count = 0;
}
}else{
$count = 0;
}
}
}//End for
return $newStr;
}
mb_ funckie zabezpečia správny prechod po znakoch, nie po bajtoch.