2

好的,所以我在网站上有一个通用的 html 表单,用户可以在其中写入和提交内容。

我想写一段 PHP 来获取整个文本并转换一些特定的值。

例如,文本:

Etiam non purus in dolor placerat sollicitudin。在 dignissim elit ut libero sodales 中,一个 sodales nunc blandit。Supendi sse vitae odio mauris, eu pulvinar augue。在坐 amet libero vel tellus posuere volutpat。twitter::Lipsum facebook::Lipsum Nulla sed purus vel orci ultrices tincidunt。Maecenas 非 sem eget risus volutpat placerat。

注意 facebook::Lipsum twitter::Lipsum

我希望 php 浏览该文本并知道 facebook::Lipsum 应该自动更改为http://www.facebook.com/Lipsum和 twitter 一个http://www.twitter.com/Lipsum

谁能建议如何做到这一点(使用 preg_match 或 str_replace)?我不确定已经搜索了一段时间,也没有找到任何具体的东西。

非常感谢

4

3 回答 3

1

您通常可以像这样替换包含 :: 标记的任何文本:

$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

http://msdn.microsoft.com/en-us/library/az24scfc.aspx

于 2012-11-24T01:01:38.350 回答
0

请注意,这只会匹配 twitter 和 facebook

preg_replace("/(facebook|twitter)::([\w]+)/", '<a href="http://www.$1.com/$2" target="_blank">http://www.$1.com/$2</a>', $yourText);

演示:http ://codepad.viper-7.com/hs3xgw

于 2012-11-24T01:16:30.390 回答
-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>";
于 2012-11-24T01:15:36.033 回答