Заместване на чист текст

  • Автор Автор Hous
  • Начална дата Начална дата

Hous

Registered
Имам следния html код:
HTML:
<a href="loremipsum.html" title="Lorem Ipsum history">Lorem Ipsum</a>
<img src="Lorem_ipsum.jpg" alt="Lorem" title="Lorem Ipsum"/>
<b>Lorem Ipsum</b>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent diam turpis, suscipit vitae sapien ut, pellentesque congue diam. Fusce rhoncus accumsan ipsum, vel dignissim nulla, lorem.
И искам да сменя всички думи lorem (без значение от малки/големи букви) но които не са във Html tag ( < > или кавички " " )


За момента използвам този код:
Код:
$string='<a href="loremipsum.html" title="Lorem Ipsum history">Lorem Ipsum</a>
<img src="Lorem_ipsum.jpg" alt="Lorem" title="Lorem Ipsum"/>
<b>Lorem Ipsum</b>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent diam turpis, suscipit vitae sapien ut, pellentesque congue diam. Fusce rhoncus accumsan ipsum, vel dignissim nulla, lorem.';

$word='lorem';
$string=str_ireplace($word,'<a href="cenzured.html">cenzured</a>',$string);

Но както вероятно се досещате той заменя всички lorem и чупи HTML кода.
 
http://codepad.viper-7.com/IlO5Ot

Ето какво измислих аз. Понеже ми беше казал на лично, че искаш първите 3 примерно да се променят, ти сложих и $limit параметъра.
 
Изглежда да работи кода, само не мога да разбера защо когато е в началото на изречение и е с главна буква не го зачита, виждам че има ( i ) поставен за insensitive и в твоя пример работи но при мен не се получава, някаква идея?

Тук намерих нещо подобно:
Click

Иначе пример в които не сработва
Код:
<span style="line-height: 1.5em;">Lorem esta....
не се замества
а когато го имам по надолу:

Код:
<span style="line-height: 1.5em;">Lorem esta esta estastkastl astlk astlka stlka stlka stlaks tlakst alskt kt91k  as easmd asdm dm wem qeima sem aseqpwekqow t  tasjtasj k. Lorem y lorem ..........</span>
първото Lorem не го обръща а второто го обръща но само ако $word="Lorem"; ако е с малко "lorem" стойност обръща само думите с малки букви... (тоест 3тото lorem) нещо се разминава но не знам къде.
 
По принцип намерих още нещо, което да добавя към pattern-а, но основната причина, че не хваща първото е, защото е между HTML тагове.
Ако трябва да хваща между някои HTML тагове, най-вероятно ще трябва да променя шаблона.

При този шаблон

#(?<=[^<>=\"'\/])(".$word.")(?=>.*?[^<>=\"'\/])#i

и според това, което ми даде като условие в началото не би трябвало да хваща нито едно lorem, и е така. Но, ако искаш да хваща между определени тагове, кажи, ще си поиграя да променя шаблона.
 
Ами принципно ми трябва да хваща между span p b и др такива тагове но да не хваща между href title alt src и подобни които чупят html-а
 
PHP:
(?<!(?<=title|src|href|alt)=["']|(?<=[\w\/\\]))lorem(?!.*<\/a>)

Надявам се това вече да ти върши работа.
 
PHP:
/(?<!(?<=title|src|href|alt)=[\"\']|(?<=[\w\/\\\]))'.$keyword.'(?!.*<\/a>)/iu

Оставям крайния шаблон, който помогна на автора.
 

Back
Горе