如果有人问过这个问题,我很抱歉,但我真的找不到有效的解决方案。我正在开发一个留言板系统,它已经完成并且可以正常工作,但是我需要将其简化,我目前已将其设置为剥离所有会破坏 sql 等但允许强、em、img 和 a 的东西。我的问题是,如果我使用标签它工作正常,但人们有时不知道如何使用它,所以我不必显示解释它的文本,我只想让 php 为我修复它。因此,用户可以剪切和粘贴地址,然后输入文本并在需要时拥有更多地址,然后提交表单。然后显示时,我希望超链接能够工作。现在,如果我使用标签,它可以正常工作,但如果我不使用标签,它只会吐出普通文本。
我到处看了看,没有任何效果。我发生的最多的是帖子根本没有出现。如果有一种不同的语言可以更容易地做到这一点,我愿意使用它,但现在我专注于 PHP 和 MySQL 来完成这项工作。如果需要,我愿意发布代码,但我不想在这篇文章中充斥大量无用的数据。我只需要它来搜索正文数据找到链接将其变成链接然后将其与周围的所有内容一起吐出。
为了清除一些东西,我正在使用包含文件夹中的方法。每个普通页面只有一小部分代码与我需要它做的事情有关。所以 forum.php 真的没有设计,而是拉出一个头文件和页脚文件,其中包含所有设计和静态内容,不会因页面而异。现在 read.php 文件会提取包含文件夹中的所有文件,并在需要时应用它们。所以我使用的代码:
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 中。那里还有其他函数可以获取 thread_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>
然后我将其更改为调用我添加的新函数:
<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 $comment_body = Comment::url_to_link($comment->body);
echo nl2br($comment_body); ?>
</div>
<div class="meta-info" style="font-size: 0.8em;">
<?php echo datetime_to_text($comment->posted); ?>
</div>
____________________________
</div>
这会产生如下所示的内容:
user wrote:
Thttp://www.example.com
Testing links.
June 28, 2013 at 03:09 PM
____________________________
数据应显示为
user wrote:
Testing
http://www.example.com
Testing Links.
Date (you get the idea)
所以代码在做某事,但它并没有将数据更改为链接,它只是删除了一些数据,然后将它们拼接在一起。我知道我做错了什么,但我无法弄清楚。
是的,我使用了 htmlentities 和 mysql_real_escape_string。请帮我。
- 编辑 -
tl;dr = 用户在论坛中输入以下内容:
testing http://stackoverflow.com testing links
我希望链接在输出上起作用,但我只希望实际链接显示为链接;它应该看起来像这样
testing <a href="http://stackoverflow.com">http://stackoverflow.com</a> testing links
但是我发现的代码不起作用。我是否必须为链接添加输入才能使其正常工作,我可以这样做,但我更希望用户只需在正文输入中输入 url,然后代码会将其转换为输出的实际链接。我目前拥有的代码在上面,再次不起作用。