2017-01-20 1 views
2

J'essaie d'obtenir environ 200 caractères/caractères (espaces compris) à partir d'un fichier texte externe. J'ai le code pour afficher le texte que je vais inclure mais pour obtenir certaines lettres, je n'ai aucune idée. Encore une fois, je ne parle pas de lignes, je veux dire vraiment des lettres.Comment obtenir x quantité de caractères du fichier texte en utilisant php?

<?php 
    $file = "Nieuws/NieuwsTest.txt"; 
    echo file_get_contents($file) . '<br /><br />'; 
?> 
+0

vous pouvez utiliser la fonction 'substr' en PHP. –

+0

Vous voulez obtenir les 200 premiers caractères de la chaîne? – Mohammad

Répondre

4

Utilisez le cinquième paramètre de file_get_contents:

$s = file_get_contents('file', false, null, 0, 200); 

Cela fonctionne seulement avec 256 caractères, et pas fonctionner correctement avec des caractères multi-octets, depuis PHP does not offer native Unicode support, malheureusement.

Unicode

Pour lire nombre spécifique de caractères Unicode , vous devrez implémenter votre propre fonction en utilisant des extensions PHP tels que intl et mbstring. Par exemple, une version de fread accepter le nombre maximum de caractères UTF-8 peut être mis en œuvre comme suit:

function utf8_fread($handle, $length = null) { 
    if ($length > 0) { 
    $string = fread($handle, $length * 4); 
    return $string ? mb_substr($string, 0, $length) : false; 
    } 

    return fread($handle); 
} 

Si $length est positif, la fonction lit le nombre maximum d'octets qu'une chaîne UTF-8 de cette le nombre de caractères peut prendre (un caractère UTF-8 est représenté par 1 à 4 octets de 8 bits) et extrait le premier $length caractères multi-octets en utilisant mb_substr. Sinon, la fonction lit le fichier entier.

Une UTF-8 version de file_get_contents peut être mis en œuvre de manière similaire:

function utf8_file_get_contents(...$args) { 
    if (!empty($args[4])) { 
    $maxlen = $args[4]; 
    $args[4] *= 4; 
    $string = call_user_func_array('file_get_contents', $args); 
    return $string ? mb_substr($string, 0, $maxlen) : false; 
    } 

    return call_user_func_array('file_get_contents', $args); 
} 
+0

C'est la meilleure méthode s'il n'a pas besoin de stocker le texte intégral dans un var! Agréable ! Les solutions les plus simples sont toujours les meilleures – Math

+0

Une question cependant, est-ce multy-byte sûr comme mb_substr? http://php.net/manual/en/function.substr.php#90581 – Math

+1

@Math, 'file_get_contents' est binaire. Cependant, la limite signifie le nombre d'octets, mais pas les caractères Unicode par exemple. Donc, pour les caractères non-ASCII, il aura besoin d'une autre solution. –

-1

utiliser ceci:

<?php 
    $file = "Nieuws/NieuwsTest.txt"; 
    echo substr(file_get_contents($file), 0, 200) . '<br /><br />'; 
?> 
1

Vous devez utiliser les fonctions substr().

Mais je vous recommande d'utiliser le coffre-fort byte multy mb_substr().

$text = mb_substr(file_get_contents($file), 200) . '<br /><br />'; 

Avec substr vous obtiendrez des problèmes s'il y a des accents, etc. Thoses problèmes ne se produiront pas avec mb_substr()