2010-03-26 7 views
13

J'ai une phrase comme ceci.Trim   avec PHP

1 $nbsp;     2     3   4 

Comme vous le voyez, entre les textes 1 2 et 3, il y a des espaces supplémentaires. Je veux la sortie avec un seul espace entre eux. donc, ma sortie sera 1 2 3 4

Si j'utilise le découpage, il ne peut que supprimer les espaces, mais pas   Comment puis-je utiliser PHP trim pour obtenir la sortie comme ça?

Répondre

18
$str = "1 $nbsp;     2     3   4"; 
$new_str = str_replace(" ", '', $str); 
+2

code PHP est interprété sur le serveur, et non le client. Le navigateur ne le voit jamais. –

1

si votre chaîne a effectivement «   »,

$str="1       2     3   4"; 
$s = str_replace("  ","",$str); 
print $s; 
1
echo str_replace (" ", "", "1       2     3   4"); 

rappelez-vous que vous devez faire écho le résultat de la str_replace et vous Alo ne avez pas besoin à vous soucier des espaces blancs un de la le navigateur affichera seulement un espace blanc.

49

Trouvé ce à php.net, fonctionne très bien:

$myHTML = " abc"; 
$converted = strtr($myHTML, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES))); 
trim($converted, chr(0xC2).chr(0xA0)); 

Source: http://php.net/manual/en/function.trim.php#98812

+0

Avez-vous remarqué des parenthèses manquantes? – Deele

+26

@Deele Je ne teste pas toujours mon code, mais quand je le fais, je le fais en production. –

+1

Excellent Tobias, merci beaucoup ... –

11

Une réponse plus inclusive pour ceux qui veulent juste faire une assiette:

$str = trim($str, " \t\n\r\0\x0B\xC2\xA0"); 

même traitement de rognage   html entités:

$str = trim(html_entity_decode($str), " \t\n\r\0\x0B\xC2\xA0"); 

Ce html_entity_decode et taillez interaction est décrite dans les documents ici PHP: http://php.net/manual/en/function.html-entity-decode.php#refsect1-function.html-entity-decode-notes

+0

Cela ne supprime pas   lorsqu'il ne s'agit que d'une chaîne de 6 caractères. –

+0

@ArtemRussakovskii: Il n'est pas censé dépouiller   parce que c'est une entité html et ne convient pas pour couper. Si vous voulez couper   supplémentaire en utilisant html_entity_decode sur la chaîne est d'abord la solution appropriée. – Chaoix

5
$str = " abc "; 

echo trim($str, "\xC2\xA0"); //abc 
+2

En règle générale, les réponses sont beaucoup plus utiles si elles comprennent une explication de ce que le code est destiné à faire, et pourquoi cela résout le problème sans en présenter d'autres. –

0

Un peu tard pour répondre, mais je l'espère pourrait aider quelqu'un d'autre. Le plus important lors de l'extraction du contenu de html est d'utiliser utf8_decode() en PHP. Alors toutes les autres opérations de cordes deviennent un jeu d'enfant. Même les caractères étrangers peuvent être remplacés en copiant directement les caractères du navigateur dans le code php. La fonction suivante remplace   par un espace. Ensuite, tous les espaces blancs supplémentaires sont remplacés par un seul espace blanc en utilisant preg_replace(). Les espaces blancs avant et arrière sont supprimés à la fin.

function clean($str) 
{  
    $str = utf8_decode($str); 
    $str = str_replace(" ", " ", $str); 
    $str = preg_replace('/\s+/', ' ',$str); 
    $str = trim($str); 
    return $str; 
} 

$html = "1 $nbsp;     2     3   4"; 
$output = clean($html); 
echo $output;