Hacer enlaces automáticos en un texto desde un archivo:Como Wikipedia interna - PHP

StackOverflow https://stackoverflow.com/questions/1366826

  •  21-09-2019
  •  | 
  •  

Pregunta

Quiero ayuda con este script que estoy haciendo...

Quiero que mi sitio web sea una wikipedia en sí misma...Tomemos, por ejemplo, que tengo un sitio web php...Publico artículos diarios sobre ello.

Supongamos que publico 2 artículos sobre Jenna Bush y Michael Jackson respectivamente.

ahora guardo en texto/xml/texto de base de datos y enlace

ejemplo

jenna bush, http://www.domain.com/jenna.html    
michael jackson, http://www.domain.com/michael.html

o cualquier forma requerida como

<xml>
<item>
<text>jenna bush</text>
<link>http://www.domain.com/jenna.html</link>
</item>
... etc
</xml>

Ahora lo que quiero es que el script PHP convierta automáticamente cualquier jenna bush o michael jackson vinculado a sus respectivos enlaces en todo mi sitio web...

Cualquier ayuda es muy apreciada...

¿Fue útil?

Solución 2

Lo personalicé y aquí está para todos los interesados.

function tags_autolink($text) 
{

$text = " $text ";
$query_tags_autolink = "SELECT tag from tags";
$rs_tags_autolink = mysql_query($query_tags_autolink) or print "error getting tags";

while($row_tags_autolink = mysql_fetch_array($rs_tags_autolink))
{
$tag_name = trim($row_tags_autolink['tag']);
$tag_url = "http://www.domain.com/tag/".createLink(trim(htmlentities($tag_name)))."/";
$text = preg_replace("|(?!<[^<>]*?)(?<![?./&])\b($tag_name)\b(?!:)(?![^<>]*?>)|imsU","<a href=\"$tag_url\">$1</a>" , $text);
}

return trim( $text );
}

la función de creación de enlace simplemente crea una cadena de "abcd is kk" como "abcd-is-kk" para el final de una página de etiquetas;)

salud !

Otros consejos

Si se asume que el texto que contiene esas palabras están en la base de datos la mejor manera de lograr algo por el estilo está utilizando str_replace http://ie2.php.net/manual/en/function.str-replace.php

Justo antes de que el texto es sometido a la base de datos se ejecuta una función en él que busca ciertas frases y los reemplaza con otras frases.

Como alternativa y, probablemente, un mejor enfoque es el mismo que MediaWiki (el software que Wikipedia se ejecuta en usos), cada vez que desea crear un enlace a otro artículo en una MediaWiki pones [[]] alrededor de él, por ejemplo [ [Michael Jackson]]. De esa manera usted tiene más control sobre lo que se convierte en un enlace.

Por ejemplo, si usted tenía un artículo sobre el príncipe el músico y uno en Príncipe Carlos y que quería enlazar con el príncipe Carlos, el primer método podría encontrar Príncipe primera y enlazar con él, sin embargo, si se utiliza el método mediawiki que iba a escribir [[príncipe Carlos]] y sería saber qué buscar. Para ello te recomiendo preg_match http: //www.php. net / manual / en / function.preg-match.php

Puede valer la pena echar un vistazo a cómo MediaWiki hace lo mismo, se puede descargar de forma gratuita y está escrito en PHP

function auto_href($x)
        {
        $x = explode(' ', $x);
        foreach ($x as $y)
                {
                if (substr($y, 0, 7) == 'http://')
                        $y = '<a href="'.$y.'">'.$y.'</a>';
                $z[] = $y;
                }
        return implode($z, ' ');
        }
function tags_autolink() 
{
    $conn = mysqli_connect("localhost", "root", "", "sample")
or die ("Could not connect to mysql because ".mysqli_error());

$text = 'You paragraph or text here';
$query_tags_autolink = "SELECT tag from tags";
$rs_tags_autolink = mysqli_query($conn,$query_tags_autolink) or print "error getting tags";

while($row_tags_autolink = mysqli_fetch_array($rs_tags_autolink))
{
$tag_name = trim($row_tags_autolink['tag']);
$trimedurl = str_replace(' ', '-',$tag_name);
$trimedurl=strtolower("$trimedurl");
$tag_url = "http://yourdomain/tag/$trimedurl";
$text = preg_replace("|(?!<[^<>]*?)(?<![?./&])\b($tag_name)\b(?!:)(?![^<>]*?>)|imsU","<a href=\"$tag_url\">$1</a>" , $text);
}

return  trim($text);
}

echo tags_autolink() ;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top