2012-05-08 7 views
6

Ejemplo de una variable $ texto: zanahorias ipsumtexto dividido en la mitad, pero en la frase más cercana

lorem, rebajas mejoradas, pero lo hacen tiempo occaecat y vitalidad, como el trabajo y la obesidad. Porque así como hemos llegado a la mínima, que nostrud aliquip fuera de ella la ventaja de ejercicio, por lo que los esfuerzos de estímulo si el distrito escolar y la longevidad. cillum DUIs ha sido cupidatat querer ser un dolor en el placer del dolor del fútbol en la huir condenan sin a pagar. negros cupidatat Excepteur no son excepteur, es calmante para el alma, que están en la la culpa es de los que abandonó las oficinas del general de los aperitivos.

división por la mitad,

$half = strlen($text)/2;

me va a llegar al carácter "O" en "la fotografía".

1: ¿Cómo se puede encontrar la posición del delimitador frase más cercano (punto) a la mitad del texto? En este ejemplo es de 7 caracteres después de que, "oh".

También este texto contiene código HTML. 1 desea ignorar el código HTML al enterarse de la media de punto del texto, e ignorar los puntos de dentro atributos HTML, etc.

+0

Es evidente que sabes conceptualmente lo que hay que hacer. 1 no ver el problema - lo has intentado y ¿por qué no funciona? –

+1

¿Qué pasa si el próximo punto de cuenta no es el final de la frase, por ejemplo, un ejemplo dado? – alex

+0

@alex, oooh malvados. – JakeParis

Respuesta

3

Tome un vistazo a substr, strip_tags y strpos. Con la ayuda de strpos a encontrar la posición del siguiente punto y con strip_tags se tira de todas las etiquetas HTML a partir de los disparos.

$string = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumt.'; 
$string = strip_tags($string); 
$half = intval(strlen($string)/2); 
echo substr($string, 0, strpos($string, '.', $half)+1); 

tener en cuenta que usted tiene que asegurarse de que existe un punto después de que el valor de $half o de lo contrario la salida no va a ser lo que desea.

Tal vez algo como esto?

if (strpos($string, '.', $half) !== false) 
    echo substr($string, 0, strpos($string, '.', $half)+1); 
else 
    echo substr($string, 0, $half) . '...'; 
2

Asumiendo que su frase puede terminar con caracteres distintos de período, usted podría mirar a esto:

$s = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; 

// find center (rounded down) 
$mid = floor(strlen($s)/2); 
// find range of characters from center that are not ?, ! or . 
$r = strcspn($s, '.!?', $mid); 

// remember to include the punctuation character 
echo substr($s, 0, $mid + $r + 1); 

Es posible que tenga que ajustar un poco, pero debe hacer su trabajo bien. Para cosas más avanzadas que estés pisando en PNL (procesamiento del lenguaje natural) territorio, para lo cual también hay bibliotecas disponibles para PHP:

http://sourceforge.net/projects/nlp/

-2
function abbrevia($str, $maxChars) { $limit=$maxChars; 
    if (strlen($str)<=$maxChars) return $str; 
    else while ($str[$limit]!=" " && $str[$limit]!="." && $str[$limit]!=";" && $str[$limit]!="," && $str[$limit]!="!" && $str[$limit]) $limit++; 
    return substr($str,0,($limit))."..."; 
} 

puede modificar esta función

Cuestiones relacionadas