Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自动链接功能工作不正常_Php_Regex_Autolink - Fatal编程技术网

Php 自动链接功能工作不正常

Php 自动链接功能工作不正常,php,regex,autolink,Php,Regex,Autolink,我创建了一个PHP函数,该函数将自动将URL转换为链接,将Twitter@reply用户名链接到其Twitter配置文件,并将电子邮件地址转换为具有mailto协议的链接 以下是脚本: function autolink($a, $b){ $e = ""; $f = array( 'link' => '~(http(s|)\:\/\/(www\.|)((\w+)\.(\w+)(\:[0-9]{2,5}|)\.[a-z]{2,5}|(\

我创建了一个PHP函数,该函数将自动将URL转换为链接,将Twitter
@reply
用户名链接到其Twitter配置文件,并将电子邮件地址转换为具有
mailto
协议的链接

以下是脚本:

function autolink($a, $b){
        $e = "";
        $f = array(
            'link' => '~(http(s|)\:\/\/(www\.|)((\w+)\.(\w+)(\:[0-9]{2,5}|)\.[a-z]{2,5}|(\w+)(\:[0-9]{2,5}|)\.[a-z]{2,5}))((((\/|)\w+)(\.[a-z]{2,5}|))+)(\?(\w+\=\w+(\&|))+|)~',
            'email' => '~\w+\@\w+(\:[0-9]{2,5}|)\.[a-z]{2,5}~',
            'twitter' => '~\@([a-zA-Z_0-9]){1,15}~'
        );
    switch ($b) {
    case "link":$e = preg_replace_callback($f['link'], function ($a) {return '<a href="'.$a.'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
    case "email":$e = preg_replace_callback($f['email'], function ($a) {return '<a href="mailto:'.$a.'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
    case "twitter":$e = preg_replace_callback($f['twitter'], function ($a) {return '<a href="https://twitter.com/#!/'.str_replace('@','',$a).'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
    }
    return $e;
}
正在返回以下内容:

这是我的站点阵列

应在何时返回此文件:

这是我的网站

最初的脚本是用JavaSript编写的,我也写过:

由于我不是PHP开发人员,JavaScript版本还有一些其他特性

也许问题是我从JavaScript中获取了正则表达式,并将其放在PHP中。我不确定PHP中的正则表达式是否与JavaScript不同


提前感谢。

尝试以下更改:

case "link":$e = preg_replace_callback(
        $f['link'],
        function ($a) {
            return '<a href="'.$a[0].'" rel="nofollow" target="_blank">'.$a[0].'</a>';
        },
        $a
     );
     break;
case“link”:$e=preg\u replace\u回调(
$f[“链接”],
功能($a){
返回“”;
},
一美元
);
打破
问题是回调的参数将是数组,而不是字符串

从:

将被调用并传递匹配元素数组的回调 在主题字符串中。回调应该返回替换 绳子


回调内部的
$a
是一个数组,返回如下内容:

Array
(
  [0] => http://weebuild.biz
  [1] => http://weebuild.bi
  [2] => 
  [3] => 
  [4] => weebuild.bi
  [5] => 
  [6] => 
  [7] => 
  [8] => weebuild
  [9] => 
  [10] => z
  [11] => z
  [12] => z
  [13] => 
  [14] => 
  [15] => 
)


您可能希望引用
$a[0]
,而不仅仅是
$a
。当然,您需要进行一些检查,以确保存在该值,并避免在引用该值时出现任何意外错误。

谢谢,我将尝试将所有$a更改为$a[0]。这似乎是唯一正确的更改,只有
$a
=>
$a[0]
。我只是把答案格式化,让它更具可读性。哦,我明白了。我不是一个真正的PHP开发人员,所以我习惯了JavaScript不返回数组的方式。
Array
(
  [0] => http://weebuild.biz
  [1] => http://weebuild.bi
  [2] => 
  [3] => 
  [4] => weebuild.bi
  [5] => 
  [6] => 
  [7] => 
  [8] => weebuild
  [9] => 
  [10] => z
  [11] => z
  [12] => z
  [13] => 
  [14] => 
  [15] =>