2009-10-22 7 views
6

J'essaie de me débarrasser des apostrophes bouclés (ceux collés à partir d'un doc de texte riche, j'imagine) et j'ai l'impression de frapper un barrage routier. Le code ci-dessous ne fonctionne pas pour moi.PHP - Se débarrasser des apostrophes bouclés

$word = "Today’s"; 
$search = array('„', '“', '’'); 
$replace = array('"', '"', "'"); 
$word = str_replace($search, $replace, htmlentities($word, ENT_QUOTES)); 

What I end up with is $word containing 'Today’s'. 

Lorsque je supprime les esperluette de mon tableau de recherche $, le remplacement a lieu mais, de toute évidence, ne sera pas le travail accompli depuis l'esperluette est laissé dans la chaîne. Pourquoi str_replace échoue-t-il lorsqu'il rencontre les esperluettes?

+2

Ces apostrophes bouclées sont appelées citations intelligentes. – random

Répondre

9

Pourquoi ne pas faire ceci:

$word = htmlentities(str_replace($search, $replace, $word), ENT_QUOTES); 

?

+0

Wow, c'était incroyablement facile. Je pense que j'ai codé trop longtemps! – Anthony

6

Pour que tout fonctionne correctement, j'avais besoin de quelque chose d'un peu plus robuste que l'exemple @cletus présenté. Voici ce qui a fonctionné pour moi:

// String full of rich characters 
$string = $_POST['annoying_characters']; 

// Replace "rich" entities with standard text ones 
$search = array(
    '“', // 1. Left Double Quotation Mark “ 
    '”', // 2. Right Double Quotation Mark ” 
    '‘', // 3. Left Single Quotation Mark ‘ 
    '’', // 4. Right Single Quotation Mark ’ 
    ''', // 5. Normal Single Quotation Mark ' 
    '&', // 6. Ampersand & 
    '"', // 7. Normal Double Qoute 
    '&lt;', // 8. Less Than < 
    '&gt;'  // 9. Greater Than > 
); 

$replace = array(
    '"', // 1 
    '"', // 2 
    "'", // 3 
    "'", // 4 
    "'", // 5 
    "'", // 6 
    '"', // 7 
    "<", // 8 
    ">" // 9 
); 

// Fix the String 
$fixed_string = htmlspecialchars($string, ENT_QUOTES); 
$fixed_string = str_replace($search, $replace, $fixed_string); 
Questions connexes