如何使用PHP更改输入的文本

时间:2012-11-24 00:29:11

标签: php regex sed

好的,我在网站上有一个常用的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)?我不确定已经搜索了一段时间,但没有发现任何特定的内容。

非常感谢

3 个答案:

答案 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

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

答案 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);

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

答案 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>";