74 votes

Supprimer les caractères non ASCII de la chaîne

J'obtiens des caractères étranges lors de l'extraction de données d'un site Web :

 Â

Comment puis-je supprimer tout ce qui n'est pas un caractère ASCII non étendu ?


Une question plus appropriée peut être trouvée ici: PHP - remplace tous les caractères non alphanumériques pour toutes les langues prises en charge

52voto

DamirR Points 563

Vous voulez uniquement des caractères ASCII imprimables ?

utilisez ceci:

 <?php
header('Content-Type: text/html; charset=UTF-8');
$str = "abqwrešđčžsff";
$res = preg_replace('/[^\x20-\x7E]/','', $str);
echo "($str)($res)";

Ou encore mieux, convertissez votre entrée en utf8 et utilisez phputf8 lib pour traduire les caractères « non normaux » dans leur représentation ascii :

 require_once('libs/utf8/utf8.php');
require_once('libs/utf8/utils/bad.php');
require_once('libs/utf8/utils/validation.php');
require_once('libs/utf8_to_ascii/utf8_to_ascii.php');

if(!utf8_is_valid($str))
{
  $str=utf8_bad_strip($str);
}

$str = utf8_to_ascii($str, '' );

38voto

Utopia Points 31

$clearstring=filter_var($rawstring, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);

2voto

simhumileco Points 5383

Je pense aussi que la meilleure solution pourrait être d'utiliser une expression régulière.

Voici ma proposition :

 function convert_to_normal_text($text) {

    $normal_characters = "a-zA-Z0-9\s`~!@#$%^&*()_+-={}|:;<>?,.\/\"\'\\\[\]";
    $normal_text = preg_replace("/[^$normal_characters]/", '', $text);

    return $normal_text;
}

Ensuite, vous pouvez l'utiliser comme ceci :

 $before = 'Some "normal characters": Abc123!+, some ASCII characters: ABC+ and some non-ASCII characters: .';
$after = convert_to_normal_text($before);
echo $after;

Affiche :

 Some "normal characters": Abc123!+, some ASCII characters: ABC+ and some non-ASCII characters: .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X