好的,我在网站上有一个常用的html表单,用户可以在其中写入并提交内容。
我想编写一段PHP来获取整个文本并转换一些特定的值。
例如,文字:
Etiam non purus in dolor placerat sollicitudin。在dignissim elit ut libero sodales sodales nunc blandit。 Suspendi sse vitae odio mauris,eu pulvinar augue。在坐下自由自在地告诉posuere volutpat。 twitter :: Lipsum facebook :: Lipsum Nulla sed purus vel orci ultrices tincidunt。 Maecenas non sem eget risus volutpat placerat。
注意 Facebook的:: Lipsum 微博:: Lipsum
我希望php能够查看该文本并知道facebook :: Lipsum应该自动更改为http://www.facebook.com/Lipsum并且twitter http://www.twitter.com/Lipsum
有人可以建议如何做到这一点(使用preg_match或str_replace)?我不确定已经搜索了一段时间,但没有发现任何特定的内容。
非常感谢
答案 0 :(得分:1)
您可以通常替换包含:: marker的任何文本,如下所示:
$text = "Etiam non purus in dolor placerat sollicitudin. In dignissim elit ut libero sodales a sodales nunc blandit. Suspendi sse vitae odio mauris, eu pulvinar augue. In sit amet libero vel tellus posuere volutpat. twitter::Lipsum facebook::Lipsum Nulla sed purus vel orci ultrices tincidunt. Maecenas non sem eget risus volutpat placerat.";
preg_replace("[(\w+)::]", "http://www.$1.com/", $text);
表示抓取包含::并替换为http://www.{string}.com/
[(\w+)::]
表示匹配任何单词字符并以:: - 大括号表示整个包含此内容,因此只有[::]只会替换::而[(\ w +)以任何单词开头,直到它遇到::]并将()中的值赋给变量$ 1
答案 1 :(得分:0)
请注意,这只会匹配Twitter和Facebook
preg_replace("/(facebook|twitter)::([\w]+)/", '<a href="http://www.$1.com/$2" target="_blank">http://www.$1.com/$2</a>', $yourText);
答案 2 :(得分:-1)
您还可以使用preg_*
功能:
$arr = array(
'twitter' => 'www.twitter.com',
'facebook' => 'www.facebook.com'
// use lowercase keys here
// or uncomment the next line
);
//$arr = array_change_key_case($arr,CASE_LOWER);
function replaceLinks($m) {
global $arr;
// make this array accessible
$key = $m[1]; // this is the array key
$page = $m[2]; // this is the part after ::
$addr = 'http://'.$arr[strtolower($key)].'/'.$page;
// get the value (address) from the array
return "<a href=\"$addr\" target=\"_blank\">$addr</a>";
// and return it as an anchor element
}
$newStr = preg_replace_callback(
'~\b('.implode('|',array_keys($arr)).')::(\S*)~i',
// this will basically compile into the following pattern:
// ~\b(twitter|facebook)::(\S+)~i
// where \b signifies beginning of word
// and \S* signifies 0 or more non empty chars
// so don't forget to urlencode or rawurlencode
// the part after :: just in case
'replaceLinks', // execute this function
$str
);
echo "<p>$newStr</p>";