lo que estoy tratando de hacer es crear un 'destructor de jerga'. Básicamente tengo algunos html y algunos términos del glosario en una base de datos. Cuando la persona hace clic en el modificador de jerga reemplaza las palabras en el texto con una buena información sobre herramientas (wztooltip) que les muestra los significados.Buscar y reemplazar palabras en HTML
he estado tratando duro en éste y estado buscando en gran medida a esta pregunta Regex/DOMDocument - match and replace text not in a link
y parece que la respuesta está en las librerías simple_html_dom pero estoy teniendo problemas para conseguir que funcione. Obviamente, las palabras ya vinculadas no se tocan. Aquí hay una lista de lo que tengo.
$html = str_get_html($article['content']);
$query_glossary = "SELECT word,glossary_term_id,info FROM glossary_terms WHERE status = 1 ORDER BY LENGTH(word) DESC";
$result_glossary = mysql_query_run($query_glossary);
while($glossary = mysql_fetch_array($result_glossary)) {
$glossary_link = SITEURL.'/glossary/term/'.string_to_url($glossary['word']).'-'.$glossary['glossary_term_id'];
if(strlen($glossary['info'])>400) {
$glossary_info = substr(strip_tags($glossary['info']),0,350).' ...<br /> <a href="'.$glossary_link.'">Read More</a>';
}
else {
$glossary_info = $glossary['info'];
}
$glossary_tip = 'href="javascript:;" onmouseout="UnTip();" class="article_jargon_highligher" onmouseover="'.tooltip_javascript('<a href="'.$glossary_link.'">'.$glossary['word'].'</a>',$glossary_info,400,1,0,1).'"';
$glossary_word = $glossary['word'];
$glossary_word = preg_quote($glossary_word,'/');
//once done we can replace the words with a nice tip
foreach ($html->find('text') as $element) {
if (!in_array($element->parent()->tag,array())) {
//problems are case aren't taken into account and grammer
$element->innertext = str_ireplace(''.$glossary['word'].' ',' <a '.$glossary_tip.' >'.$glossary['word'].'</a> ', $element->innertext);
//$element->innertext = str_ireplace(''.$glossary['word'].',',' <a '.$glossary_tip.'>'.$glossary['word'].'</a> ', $element->innertext);
//$element->innertext = preg_replace ("/\s(".$glossary_word.")\s/ise","nothing(' <a'.'$glossary_tip.'>'.'$1'.'</a> ')" , $element->innertext);
// $element->innertext = str_replace('__glossary_tip_replace__',$glossary_tip, $element->innertext);
}
}
}
$article['content'] = $html->save();
Soy un colega. El verdadero problema es que estamos teniendo problemas para conseguir que el código solo coincida con las palabras de invidiaul y no con las palabras dentro de las palabras (es decir, con APS tal vez). Estas palabras están dentro de HTML también. Entonces eso necesita considerar. – David
Seguramente es solo el caso de escribir una expresión regular lo suficientemente potente, probablemente usando espacios en blanco y signos de puntuación para detectar límites de palabras, aunque no me avergonzaré por intentarlo.+1 – shanethehat
¿Desea una solución JS o una solución PHP, porque usó ambas etiquetas? – Gerben