本文整理汇总了PHP中Typecho_Common::lockHTML方法的典型用法代码示例。如果您正苦于以下问题:PHP Typecho_Common::lockHTML方法的具体用法?PHP Typecho_Common::lockHTML怎么用?PHP Typecho_Common::lockHTML使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Typecho_Common
的用法示例。
在下文中一共展示了Typecho_Common::lockHTML方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: process
/**
* 处理文本
*
* @access public
* @param string $text 文本
* @return string
*/
public static function process($text)
{
/** 锁定标签 */
$text = Typecho_Common::lockHTML($text);
/** 重置计数器 */
self::$_uniqueId = 0;
self::$_blocks = array();
/** 将已有的段落后面的换行处理掉 */
$text = preg_replace(array("/<\\/p>\\s+<p(\\s*)/is", "/\\s*<br\\s*\\/?>\\s*/is"), array("</p><p\\1", "<br />"), trim($text));
/** 将所有非自闭合标签解析为唯一的字符串 */
$foundTagCount = 0;
$textLength = strlen($text);
$uniqueIdList = array();
if (preg_match_all("/<\\/\\s*([a-z0-9]+)>/is", $text, $matches, PREG_OFFSET_CAPTURE)) {
foreach ($matches[0] as $key => $match) {
$tag = $matches[1][$key][0];
$leftOffset = $match[1] - $textLength;
$posSingle = strrpos($text, '<' . $tag . '>', $leftOffset);
$posFix = strrpos($text, '<' . $tag . ' ', $leftOffset);
$pos = false;
switch (true) {
case false !== $posSingle && false !== $posFix:
$pos = max($posSingle, $posFix);
break;
case false === $posSingle && false !== $posFix:
$pos = $posFix;
break;
case false !== $posSingle && false === $posFix:
$pos = $posSingle;
break;
default:
break;
}
if (false !== $pos) {
$uniqueId = self::makeUniqueId();
$uniqueIdList[$uniqueId] = $tag;
$tagLength = strlen($tag);
$text = substr_replace($text, $uniqueId, $pos + 1 + $tagLength, 0);
$text = substr_replace($text, $uniqueId, $match[1] + 7 + $foundTagCount * 10 + $tagLength, 0);
// 7 = 5 + 2
$foundTagCount++;
}
}
}
foreach ($uniqueIdList as $uniqueId => $tag) {
$text = preg_replace_callback("/<({$tag})({$uniqueId})([^>]*)>(.*)<\\/\\1\\2>/is", array('Typecho_Common_Paragraph', 'replaceBlockCallback'), $text, 1);
}
$text = self::cutByBlock($text);
$blocks = array_reverse(self::$_blocks);
foreach ($blocks as $blockKey => $blockValue) {
$text = str_replace($blockKey, $blockValue, $text);
}
$text = self::fixPragraph($text);
/** 释放标签 */
return Typecho_Common::releaseHTML($text);
}