2012-05-08 2 views
2

Середина строки HTML, рассматриваемая как текст, после/перед ближайшим предложением.Вставить текст в середине строки HTML

Пример:

$str = 'First sentence. Second sentence! <a title="Hello. World"> 
     Third sentence. </a> Fourth sentence. Fifth sentence?'; 

$middle = strlen($str)/2; 

, что я сделал это, чтобы добавить ключевое слово, чтобы все остановятся символы, такие как ., ! или ?, но только те, за пределами HTML-теги:

$str = 'First sentence. Second sentence! <a title="Hello. World"> 
     Third sentence. </a> Fourth sentence. Fifth sentence?'; 
$str = preg_replace_callback("/(\.|\?|\!)(?!([^<]+)?>)/i", function($matches){ 
    return $matches[1].'<!-- stop -->'; 
}, $str); 

Это превращает $ str in:

First sentence.<!-- stop --> Second sentence!<!-- stop --> <a title="Hello. 
World"> Third sentence.<!-- stop --> </a> Fourth sentence.<!-- stop --> Fifth 
sentence?<!-- stop --> 

Теперь, как можно Я нахожу подстроку <!-- stop -->, ближайшую к позиции $middle, и вставляем мой текст перед этим?

Есть ли способ найти позицию $matches[1] внутри моего обратного вызова preg_replace относительно всей строки? Таким образом, я мог бы просто сравнить это с $ middle

ответ

4
<?php 
    $str = 'First sentence.<!-- stop --> Second sentence!<!-- stop --> <a title="Hello. 
    World"> Third sentence.<!-- stop --> </a> Fourth sentence.<!-- stop --> Fifth 
    sentence?<!-- stop -->'; 
    $str1 = explode('<!-- stop -->',$str); 
    $str1[round(sizeof($str1)/2)-2].="!Append text!"; 
    $glue=htmlentities('<!-- stop --/>'); 
    echo $str2 = implode($glue,$str1); 
?> 

как это?

Смежные вопросы