webForumDet fria alternativet

URL och wordwrap function gillar ej varandra?!

3 svar · 323 visningar · startad av jwradhe

jwradheMedlem sedan juni 2002818 inlägg
#1

Håller på med en kod där jag använder en slags BBcode till url samt sedan en "real_wordwrap" funktion på en text, men vill inte att wordwrap ska bryta en [ u r l = adress ] Sida [ / u r l ] kod utan skippa sånna men wordwrap på resten, hur ska ja göra?

function real_wordwrap($string,$width,$break){
   $string = preg_replace('/([^\s]{'.$width.'})/i',"$1$break",$string);
   return $string;
}
 
function url($text){
    //remove <   and >  and " ect.
    $text = htmlspecialchars($text);         
 
    $text = preg_replace ('/\[url\=(.*?)\](.*?)\[\/url\]/is', '<a href="http://$1" target="_blank">$2</a>', $text);  
 
       
    $text = nl2br($text); 
    $text = trim($text); 
    
    return $text; 
}

och sen kör jag

url(real_wordwrap($text,40,"<br />\n"));

Kan detta göras på annat sätt för att få fram önskat resultat?

jwradheMedlem sedan juni 2002818 inlägg
#2

Någon vänlig själ som har någon aning, kanske ska ja formulera om frågan?

nitro2k01Medlem sedan aug. 20037 630 inlägg
#3

Försök 1...

<?PHP
function raw_wordwrap($string,$width,$break){
   $string = preg_replace('/([^\s]{'.$width.'})/i',"$1$break",$string);
   return $string;
}

function real_wordwrap($string,$width,$break){
   $string = preg_replace('/([^<]*)(<[^>]+>)?/ie', 'raw_wordwrap("$1", '.$width.', \'' . $break . '\')."$2" ',$string);
   return $string;
}
 
function url($text){
    //remove <   and >  and " ect.
    $text = htmlspecialchars($text);         
 
    $text = preg_replace ('/\[url\=(https?:\/\/[^\]]+)\](.*?)\[\/url\]/is', "<a href=\"$1\" target=\"_blank\">$2</a>", $text);  
 
       
    $text = nl2br($text); 
    $text = trim($text); 
    
    return $text; 
} 
$text="cvbnmnbvbxmcvbnxcmvbxcvmnbxcvmxbncvmxcbvxmvbxmvbxcmvb[u[b][/b]rl=http://www.wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.com]mycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycket[/url][u[b][/b]rl=http://]ogiltigurl[/url][u[b][/b]rl=http://www.google.se]lank1paraken[/url][u[b][/b]rl=http://www.google.se]lank2paraken[/url]mycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycket";

echo real_wordwrap(url($text),40,"<br />\n"); 

?>

Funkar, och jag har förbättrat tagg-detektionen lite. Dock så är det möjligt att stoppa in längre ord än gränsen genom att lägga flera url-taggat efter varandra där varje textsträng är lite kortare än gränsen. Det enkla sättet skulle vara att lägga in ett mellanslag innan a-taggen. Jag ska dock fnula lite på det svåra sättet och återkomma.

nitro2k01Medlem sedan aug. 20037 630 inlägg
#4

Försök 2

<?PHP
function real_wordwrap($string,$width,$break){
   $string = preg_replace('/([^<](<[^>]+>)?){'.$width.'}/i', "$0$break",$string);
   return $string;
}
 
function url($text){
    //remove <   and >  and " ect.
    $text = htmlspecialchars($text);         
 
    $text = preg_replace ('/\[url\=(https?:\/\/[^\]]+)\](.*?)\[\/url\]/is', "<a href=\"$1\" target=\"_blank\">$2</a>", $text);  
 
       
    $text = nl2br($text); 
    $text = trim($text); 
    
    return $text; 
} 
$text="cvbnmnbvbxmcvbnxcmvbxcvmnbxcvmxbncvmxcbvxmvbxmvbxcmvb[url=http://www.wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.com]mycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycke[/url][url=http://]ogiltigurl[/url][url=http://www.google.se]lank1paraken[/url][url=http://www.google.se]lank2paraken[/url]mycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycketmycket";

echo real_wordwrap(url($text),40," "); 

?>

Så det, det gick enklare än jag trodde. Nu bör koden göra precis det du vill. Notera att url numera ska anropas innanför real_wordwrap. För övrigt så bör man, enligt min högst personliga åsikt, ha mellanslag som separationstecken och låta texten flöda naturligt i dokumentet.

Genererad på 382 ms · cache AV · v20260730165559-full.f96bc7eb