在preg_replace正则匹配的时候为什么会多出一个“?”号

chenqiuwu 2007-11-28 05:08:59
我是用file_get_contents读取一个文件。

代码如下
<?php
$new_title = ">2001年 1月 2日 周三";
echo $new_title;
$filename = "1/1.txt";
$fcontent = file_get_contents($filename);
$pattern = "/(.+)>(\d{4}年)?\s?\d{1,2}月\s?\d{1,2}日\s*周[一|二|三|四|五|六|日](.+)/";
$ncontent = preg_replace($pattern,"\${1}$new_title\${3}" ,$fcontent);
$tt = preg_replace($pattern,"\${3}" ,$fcontent);
echo $tt;
file_put_contents($filename, $ncontent);
?>

匹配和替换都没有问题,但是问题是\${3}截取出来的,前面总是多一个“?”号。
我用 $tt把后面部分显示出来果然多了一个?号。

比如要匹配的那行为 “<p><font size="+2"><strong>2005年 6月 5日 周五 13:00 免费公开课(北京)</strong></font></p>”
我匹配完以后那行却为 “<p><font size="+2"><strong>2001年 1月 2日 周三?13:00 免费公开课(北京)</strong></font></p>”

不知道哪位有遇到相同问题的指教一下。
...全文
144 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenqiuwu 2007-11-29
  • 打赏
  • 举报
回复
过滤字符串的方法是可以的。我是想了解下怎么根本的解决这个问题。

是不是有mb_前缀的相关函数可以解决的?

lwkyy 2007-11-28
  • 打赏
  • 举报
回复
是编码问题了,建议你过滤一下\${3},
dreambird1983 2007-11-28
  • 打赏
  • 举报
回复
个人感觉是编码的问题,因为其中用了中文

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧