2011-12-19 3 views
0

Facebook APIを使用して、特定のFacebookアカウントのWebページに投稿を表示しています。 Facebookのユーザーが長いURLのテキスト(つまり、< a href = "http://www.google.com"> http:// thisisreallylongandeventuallybreaksmyfrigginlayout </a>)のリンクを含むメッセージを投稿すると、レイアウトが壊れてしまいます。PHPを使用してFacebook APIからURLテキストを短縮する

public function linkify($ret) { 
    $ret = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", "\\1<a href=\"\\2\">\\2</a>", $ret); 
    $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\">\\2</a>", $ret); 
    $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\[email protected]\\3\">\\[email protected]\\3</a>", $ret); 
    return $ret; 
    } 

誰もが、それはまた、任意に切り捨てように私は機能を変更するために助けることができます:ここで

は、私は現在、FacebookのAPIからのポストを取り、HTMLリンクに任意のURLを回すために使用しているPHPの関数の長いリンクテキスト?私はメッセージ全体を切り捨てることについて話すのではなく、リンクの長いテキストだけを切り詰めることについて話しているわけではありません。

ありがとうございます!

答えて

2

が、それは私の機能に次の行を追加することで動作するようになった:

$ret = preg_replace("/>(([[:alnum:]]+:\/\/)|www\.)([^[:space:]]"."{5,10})([^[:space:]]*)([^[:space:]]{5,10})([[:alnum:]#?\/&=])"."</", ">\\3...\\5\\6<", $ret); 
1

あなたはすでにURLを見つけるための正規表現を持っているので、これを実装することはケーキです。ここで擬似コードは次のとおりです。

for each($matchedLink in $ret) { 
    $ret = $ret.replace($matchedLink, "<a href='$matchedLink'>$(truncate($matchedLink))</a>"; 
} 

(申し訳ありませんが、私はPHPコーダーないです、多分それはよりスマートな方法で行うことができます)

+0

私はwwwを切り詰めていません。モバイルレイアウトなのでレイアウトを修正できません。リンクが本当に長くなると、ページはズームアウトされ、100%ズームインされません。壊れていないので、表示しないようにしてください。私は、問題を引き起こしているURLのテキストだけ、テキストを制限したくない。私はFacebookの投稿を作成していないので、私はURLの短縮を使用することはできません。 – codeman

+0

私はPHPコードを書いていませんでした。私は正規表現が良くない...それが私がここに投稿した理由です。 :)私はコードに感謝します。 – codeman

関連する問題