修改discuzcode.func.php解决远程图片含有百分号出错的问题

[ 2010-07-22 14:32:35 | 作者: admin ]
字号: | |
Warning: sprintf() [function.sprintf]: Too few arguments in http://www.52news.com \ discuzcode.func.php on line 369

出现这个问题,网上看了下没有看到解决办法,dz官方好像也无视这个问题。自己研究了下发现 format参数变量不足,导致arg无处安放。
原因基本是原创文件地址含有百分号而使dz的$tag变量出错,官方不知道为何一直没有修改这个bug。
自己修改了下,给个临时的权宜之办法,只要改动 bbcodeurl($url, $tags) ,问题可以解决。

出现问题的朋友自己下载discuzcode.func.php修改bbcodeurl函数

修改后bbcodeurl 函数
function bbcodeurl($url, $tags) {
  if(!preg_match("/<.+?>/s", $url)) {
    if(!in_array(strtolower(substr($url, 0, 6)), array('http:/', 'https:', 'ftp://', 'rtsp:/', 'mms://'))) {
      $url = 'http://'.$url;
    }

    $tags = str_replace( $url,"%s",$tags); //增加一行
        
    return str_replace(array('submit', 'logging'), array('', ''), sprintf($tags, $url, addslashes($url)) );
  } else {
    return '&nbsp;'.$url;
  }
}





sprintf函数参考:
定义和用法
sprintf() 函数把格式化的字符串写写入一个变量中。

语法
sprintf(format,arg1,arg2,arg++)

参数 描述
format 必需。转换格式。
arg1 必需。规定插到 format 字符串中第一个 % 符号处的参数。
arg2 可选。规定插到 format 字符串中第二个 % 符号处的参数。
arg++ 可选。规定插到 format 字符串中第三、四等等 % 符号处的参数。

说明
参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束。下面的可能的 format 值:

•%% - 返回百分比符号
•%b - 二进制数
•%c - 依照 ASCII 值的字符
•%d - 带符号十进制数
•%e - 可续计数法(比如 1.5e+3)
•%u - 无符号十进制数
•%f - 浮点数(local settings aware)
•%F - 浮点数(not local settings aware)
•%o - 八进制数
•%s - 字符串
•%x - 十六进制数(小写字母)
•%X - 十六进制数(大写字母)
arg1, arg2, ++ 等参数将插入到主字符串中的百分号 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。


范例
<?php
$str = "Hello";
$number = 123;
$txt = sprintf("%s world. Day number %u",$str,$number);
echo $txt;
?>
[最后修改由 admin, 于 2010-09-13 20:44:24]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=1431

这篇日志没有评论。

此日志不可发表评论。