Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 MySQL值包含链接,无法将文本更改为超链接(我的标题糟透了)_Php_Regex_Text Parsing - Fatal编程技术网

Php MySQL值包含链接,无法将文本更改为超链接(我的标题糟透了)

Php MySQL值包含链接,无法将文本更改为超链接(我的标题糟透了),php,regex,text-parsing,Php,Regex,Text Parsing,如果有人问这个问题,我很抱歉,但我真的找不到有效的解决方案。我正在开发一个留言板系统,它已经完成并工作了,但是我需要把它哑下来,我现在已经设置好了它,可以去掉所有会破坏sql的东西,但是可以使用strong、em、img和a。我的问题是,如果我使用标签,它工作得很好,但人们有时不知道如何使用它,所以我不需要显示解释它的文本,我只想让php为我修复它。因此,用户可以剪切和粘贴一个地址,然后输入文本,如果需要,可以拥有更多地址,然后提交表单。当它显示出来时,我希望超链接能够正常工作。现在,如果我使用

如果有人问这个问题,我很抱歉,但我真的找不到有效的解决方案。我正在开发一个留言板系统,它已经完成并工作了,但是我需要把它哑下来,我现在已经设置好了它,可以去掉所有会破坏sql的东西,但是可以使用strong、em、img和a。我的问题是,如果我使用标签,它工作得很好,但人们有时不知道如何使用它,所以我不需要显示解释它的文本,我只想让php为我修复它。因此,用户可以剪切和粘贴一个地址,然后输入文本,如果需要,可以拥有更多地址,然后提交表单。当它显示出来时,我希望超链接能够正常工作。现在,如果我使用标签,它可以正常工作,但如果我不使用标签,它只会吐出正常的文本

我找遍了所有的地方,什么也没找到。我所发生的最多的事情就是那篇文章根本没有出现。如果有一种不同的语言更容易做到这一点,我愿意使用它,但现在我专注于PHP和MySQL来实现这一点。如果需要的话,我愿意发布代码,但我不想在这篇文章中充斥大量没有实际帮助的数据。我只需要它来搜索身体数据,找到链接,把它变成链接,然后把它和周围的一切都吐出来

为了澄清一些事情,我使用了includes文件夹中的方法。每个普通页面只有一小部分代码与我需要它做的事情相关。因此,forum.php实际上没有设计,而是拉入一个页眉文件和页脚文件,其中包含所有的设计和静态内容,不会随页面的变化而变化。现在read.php文件提取includes文件夹中的所有文件,并在需要时应用它们。所以我使用的代码是:

public static function url_to_link($text) {
        // The Regular Expression filter
        $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
        // Check if there is a url in the text
        if (preg_match_all($reg_exUrl, $text, $url)) {
            // make the urls hyper links            
            foreach($url[0] as $v){                
                //current position of the searached url
                $curpos = strpos($text,' '.$v)+1;
                //delete the url                
                $text = substr_replace($text,'', $curpos, strlen($v));
                //insert the link
                $text = substr_replace($text,''.$v.'', $curpos ,0);                
            }
            return $text;
        } 
        else {
            // if no urls in the text just return the text
            return $text;
        }
    }
其中一个在includes/comment.php文件中。其中还有其他函数,它获取线程的id并将其传递到read.php页面,并显示对线程的回复。现在在read.php文件中,我有以下代码:

<div id="comments">
<?php foreach($comments as $comment): ?>
<div class="comment" style="margin-bottom: 2em;">
<div class="author">
<a href='profile.php?id=<?php echo $diuser[0] ?> '><?php echo htmlentities($comment->author) ?></a> wrote:
</div>
<div class="body">
<?php echo strip_tags($comment->body, '<strong><em><p><a><img>'); ?>
</div>
<div class="meta-info" style="font-size: 0.8em;">
<?php echo datetime_to_text($comment->posted); ?>
</div>
____________________________
</div>
<?php endforeach;
if(empty($comments)) { echo "No comments."; } ?>
</div>
数据应该显示为

user wrote:
Testing

http://www.example.com

Testing Links.
Date (you get the idea)
因此,代码正在做一些事情,但它不是将数据更改为链接,它只是删除一些数据,然后将其组合在一起。我知道我做错了什么,但我想不出来

是的,我使用了htmlentities和mysql\u real\u escape\u字符串。请帮帮我

--编辑--

tl;dr=用户在论坛中输入以下内容:

testing http://stackoverflow.com  testing links
我希望链接在输出上工作,但我只希望实际链接显示为链接;应该是这样的

testing <a href="http://stackoverflow.com">http://stackoverflow.com</a> testing links
测试链接

但是我发现的代码不起作用。我是否必须为链接添加一个输入以使其工作,我可以这样做,但我更希望用户只需在正文输入中键入url,然后代码将其转换为输出时的实际链接。我目前拥有的代码如上所述,同样不起作用。

您不需要查看MySQL。数据库很好

您需要查看的是正则表达式和其他文本解析功能,以搜索注释中的链接,然后输出包含标记的注释:

这相当简单。然而,这并不是一件小事,实际的结果是,大多数网站只是使用BBCode或发明一种简单的语法(StackOverflow和Reddit都使用括号包围链接的组合(尽管StackOverflow也检测链接))

preg_replace
可能满足您的需求

请重新书写您的长篇演讲,将其浓缩为:

  • 您正在处理的实际文本
  • 预期输出(带有HTML字符)

删除对数据库的任何引用。您已经从数据库中获取了数据,信息的来源现在已经无关紧要了。

我只是想更新此信息,以便其他人知道如何使用此功能,因为我以前没有得到任何真正的帮助

首先,我使用PHP OO方法

例如:

Comment.php  // has the makeLinks code

public static function makeLinks($str) {    
     return preg_replace('/(https?):\/\/([A-Za-z0-9\._\-\/\?=&;%,]+)/i', '<a href="$1://$2" target="_blank">$1://$2</a>', $str);
}
Comment.php//包含makeLinks代码
公共静态函数makeLinks($str){
返回preg\u replace('/(https?:\/\/([A-Za-z0-9\.\-\/\?=&;%,]+)/i','','','$str);
}
该函数将在需要makeLinks命令的其他文件中调用,如下所示:

user wrote:
Thttp://www.example.com

Testing links.
June 28, 2013 at 03:09 PM
____________________________
$comment_body = Comment::makeLinks(strip_tags($comment->body, '<strong><em><p><a><img>'));
     echo nl2br($comment_body);
$comment\u body=comment::makeLinks(带标签($comment->body,);
echo nl2br($comment_body);

我希望这是有道理的,并且有人会觉得它有用

你在找这样的东西吗?这听起来更像是一个评论,而不是一个回答。@DavidStarkey 99%的帖子都是无关的华夫饼干。“我只需要它来搜索身体数据,找到链接,把它变成一个链接,然后把它和周围的一切都吐出来。”我想我给出了一个关于如何做到这一点的回答,以及一些关于如何更好地写问题的建议。相比之下,你的评论听起来像是对我的回答!也许这是一个答案,但正如你们所注意到的,这个问题太长了;医生在那儿。我的个人政策是,如果我不阅读整个问题,我不会发布答案,但评论总是有帮助的。如果你认为正则表达式有助于回答这个问题,请随意使用它。我已经编辑了这个问题。我为tl添加了几行;医生,外面的人。但我的问题没有得到回答。我试过preg_replace,但仍然没有达到我想要的效果,也许我的代码不对。我将进一步研究它,但我的问题是,当用户输入url时,当观众点击输出中的链接时,链接不起作用。
$comment_body = Comment::makeLinks(strip_tags($comment->body, '<strong><em><p><a><img>'));
     echo nl2br($comment_body);