Jump to content

Borrowed link detector generating error with UTF-8 page


toad78

Recommended Posts

I have this code from Martin Pain of m-bread.com. This code works great within a web page that is set to a charset of "iso-...".

function urls2linksComplex($text, $schemes = null, $tlds = 'normal'){
  //"urls2links - Complex" function by Martin Pain / m-bread ( http://m-bread.com/resources/php/functions/urls2linksComplex )
  //This function can be distributed under the Creative Commons Attribution-Share Alike 2.0 UK: England & Wales License
  //( http://creativecommons.org/licenses/by-sa/2.0/uk/ )
  //Please leave these comments intact.
  if($schemes == 'normal'){
    $scheme = '(?:[Hh][Tt]|[Ff])[Tt][Pp][ss]?';
  }elseif( is_array($schemes) ){
    $scheme = '(?:' . implode('|', $schemes) . ')';
  }elseif( is_string($schemes) ){
    $scheme = $schemes;
  }else{
    $scheme = '[a-zA-Z][a-zA-Z0-9\-+.]*';
  };//EoIF
  if($tlds == 'normal'){
    $tldExclude = array('doc', 'xls', 'txt', 'rtf', 'jpeg', 'jpg', 'gif', 'png', 'exe', 'html', 'htm', 'zip', 'gz', 'scr', 'rar', 'php', 'php3', 'inc', 'ico', 'bmp', 'asp', 'jsp', 'dat', 'lnk', 'cab', 'csv', 'xml', 'xsl', 'xsd', 'svg', 'psp', 'psd', 'pdf', 'bak', 'wav', 'mp3', 'm4v', 'midi', 'wmv', 'wma', 'js', 'css', 'ppt', 'pps', 'mdb');
  }elseif( is_array($tlds) ){
    $tldExclude = $tlds;
  }elseif( is_string($tlds) ){
    $tldExclude = array($tlds);
  }else{
    $tldExclude = array();
  };//EoIF
    $userinfo = '(??:[a-zA-Z0-9\-._~!$&\'()*+,;=:]|%[0-9A-Fa-f]{2})*@)?';
      $decOctet = '(?:[0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
     $ipv4 = '(?:'.$decOctet.'\.){3}'.$decOctet;
     $regname = '(??:[0-9A-Za-z][0-9A-Za-z\-]*[0-9A-Za-z]|[0-9A-Za-z])\.)+[a-zA-Z]{2,6}';
    $host = '('.$ipv4.'|'.$regname.')';
    $port = '(?::[0-9]*)?';
   $authority = '((?://)?'.$userinfo.$host.$port.')';
   $path = '(?:/(?:[a-zA-Z0-9\-._~!$&\'()*+,;=:]|%[0-9A-Fa-f]{2})*?)*';
   $query = '(?:\?(?:[a-zA-Z0-9\-._~!$&\'()*+,;=:/?]|%[0-9A-Fa-f]{2})*?)?';
   $fragment = '(?:#(?:[a-zA-Z0-9\-._~!$&\'()*+,;=:/?]|%[0-9A-Fa-f]{2})*?)?';
  $pattern = '\b(('.$scheme.'\?'.$authority.$path.$query.$fragment.')($|[^\w/][<\s]|[<\s]|[^\w/]$)';
  $replacement = '( !in_array( substr(\'$4\', strrpos(\'$4\', \'.\')+1), $tldExclude) )?\'<a href="\'.((\'$2\' == \'\')?((strpos(\'$3\', \'@\'))?\'mailto:$1\':\'http://$1\'):\'$1\').\'">$1</a>$5\':\'$0\'';
  return preg_replace('¦'.$pattern.'¦e', $replacement, $text);
};//EoFn urls2links

 

Unfortunately, the web page needs to be UTF-8 because ISO doesn't like some characters used.

 

The error I receive when attempting to use the above code with UTF-8 is this:

Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in C:\htdocs\blahbah\team\blahblah.php on line 93.

 

Line 93 is the following from above:

return preg_replace('¦'.$pattern.'¦e', $replacement, $text);

 

I'm not real bright with PHP (dunce cap on) and was hoping someone can take a look and tell/give me some education why the error and how can it be fixed.

 

I've attempted to contact the creator of the code three times and have not received any responses.

 

Thank you PHP Freaks!

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.