これはハックな解決策ですが、文字エンコーディングを気にせずにこれにどのようにアプローチしているかを収集すると、おそらく、いまいましいことを機能させたいだけです.
まず、ハイパーリンクをハッキーな BBCode に変換します。次に、それを実行htmlentities()
し、最後にハッキーA
な BBCode を古き良き HTML に置き換えます。これを見てください:
$foo = 'Opening quietly in Chicagos West Loop, the Inspire Business Center is looking to take a more active role in Chicagos startup scene … Continue reading <span class="meta-nav">→</span>';
echo smartencode($foo);
function smartencode($str) {
$tags = 'a|span';
// Convert Anchor Tags to hacky-BBCode
$ret = preg_replace('/\<(\/?('.$tags.').*)\>/U', '[$1]', $str);
// Remove so-called Garbage
$ret = preg_replace('/[^(\x20-\x7F)]*/','', $ret);
// $ret = htmlentities($ret, ENT_QUOTES | ENT_IGNORE, 'UTF-8');
// Reinstate Anchor tags in HTML
$ret = preg_replace('/\[(\/?('.$tags.').*)\]/U', '<$1>', $ret);
return $ret;
}
繰り返しますが、エレガントではありません。実際、よく見ると、いくつかの落とし穴が見つかる可能性がありますが、ユースケースではうまくいくと思います。
http://writecodeonline.com/php/でテストされ、期待どおりに動作しました。