我在使用php时遇到错误(str_replace)

时间:2018-09-08 15:09:49

标签: php json

使用php str_replace函数时出现错误。 我正在读取其他文件中的字符串JSON 并且,如果我删除了str_replace部分,则没有错误,但我想使**变为粗体,如果您知道还有其他方法也可以这样说。

<?php
  $data = json_decode($readjson, true);
  echo "<br/><br<br/>";
  foreach ($data as $emp) {
    echo str_replace("**","<strong>","$data"), $emp['message']."<br/>";
  }
?>    

输出为

  

注意:第16行上的C:\ Users \ k-ver \ Dropbox \ Other \网站内容或smth \ r3mind3r \ changelog.php中的数组到字符串的转换   Array -Weekley Update-我们身边又一个美好的一周!我们在与raspberry pi (我们将要托管的计算机)同步方面取得了令人振奋的进步,并且比我们承诺的版本更接近我们。我们也一直在固定静音命令,并且它们非常接近要使其正常运行,还需要取消静音命令。语言功能已完全关闭,并且约有70%的机器人已使用了语言系统。我们还开发了一个新系统,应该对开发人员和翻译人员来说更容易使用。 发布atm剩下的就是:-完成同步-修复Mutate命令和unmute命令-制作一个功能正常的permissonlevel系统-添加最后30%尚未安装翻译系统的bot 。该机器人将有巨大的释放! (大约是您问我的时间)

(用于开发日志)

我不了解的部分是通知,我也不知道如何解决它 如果你们想帮助我,那太好了。

4 个答案:

答案 0 :(得分:0)

此变量应为字符串值,例如$emp['message'],而不是多维数组$data

// see this line with $emp['message'] not $data array
str_replace("**","<strong>",$emp['message']);

编辑:根据评论

<?php
$string = '{
"188762891137056769": {
"message": "\n**- Weekley Update -**\nAnother great week at our side! \nWe have made enournous advances in synching with the raspberry pi *(the computer we are going to host from)* and are closer than ever to our promised release\n\nWe have also been fixing on the mute commands and are very close to making it work, aswell with unmute command.language feature is closing \nup on complete and about 70% of the bot has the language system working. We also made a new system that should be easier to use for bouth \nus devs and the translators.\n\n**All thats left for the release atm is:**\n-finishing synching \n-fixing the mute command and unmute command \n-make a functioning permissonlevel system\n-adding those last 30% of the bot that does not have the translationsystem in place. \n\nand the bot will have its huge release! *(about time if you asked me)*"
}
}';
$array = json_decode($string,1);
$message = $array['188762891137056769']['message'];
$re = '/\*\*(.*?)\*\*/m';
$subst = '<strong>$1</strong>';
echo preg_replace($re, $subst, $message);
?>

演示: https://3v4l.org/ovhGq

答案 1 :(得分:0)

您在str_replace(“ **”,“”,“ $ data”)内部使用了数组,这是错误的,如何修复它,只需将$ data替换为$ emp

答案 2 :(得分:0)

您的代码是:

foreach ($data as $emp) {
    echo str_replace("**","<strong>","$data"), $emp['message']."<br/>";
}

您会看到$ data是一个数组,$ emp是foreach循环中的当前元素。 因此,您应该这样做:str_replace(“ ”,“”,$ emp

顺便说一句,我看到的是: $ emp ['message'] ,这意味着$ emp也是数组吗? 也许您应该发布$ readjson变量,这样我们才能知道数据的类型。

答案 3 :(得分:0)

如果要用<strong></strong>将**之间的文本括起来,则需要使用正则表达式。这是您需要执行的一些代码:

function boldify($text) {
    return preg_replace('/\*\*((.|\n|\r)*)\*\*/imU', '<strong>$1</strong>', $text);
}

基本上,它使用函数preg_replace根据正则表达式(第一个参数)进行替换。

此正则表达式如何工作:

1)您开头有\*\*,因为这是您的“开始标签”。 (*是一个特殊的正则表达式字符,因此需要转义。)

2)您有((.|\n|\r)*)
内部:.|\n|\r说:“抓住我任何字符(。)或(|)换行符(\ n)或回车符(\ r)。”。
然后,您的内部用(inner part)*括起来。上面写着“任意次数匹配内部”。
最后,您用(middle part)包围了“中间部分”。上面写着“记住您刚才在括号内捕获的内容,我们将用它来替换。

3)您又有\*\*

4)所有这些都包含在/regex/imU中。
/可以用来说明正则表达式的实际位置。
imU是标志:i是忽略大小写,m是多行,U是不满意的。
我是m,很直率,但是U说“抓住尽可能小的组”。

您有'<strong>$1</strong>'作为第二个参数。 $ 1是我们从2)中记得的组。

第三个参数是主题。

我希望这很清楚。

您可以像这样使用它:

echo boldify($emp['message']);