Remplacer les caractères de citation par de meilleurs

J'ai une page Web où je souhaite remplacer tous les caractères de citation standard " par les citations les plus belles. Par exemple, nous avons

"hello world"

Qui serait remplacé par

“hello world”

Dans le marquage, montrant les citations beaucoup plus «curly».

Les deux caractères spéciaux HTML sont des paires, en ce sens qu'ils "ouvrent" et "ferment" un bloc de devis, au lieu d'être un double tiret générique, c'est là que je lutte – en remplaçant simplement toutes les citations par “ Est facile, mais je veux le faire afin que les paires open / close soient respectées.

Je pourrais manquer quelque chose d'évident ici, mais je pense que la solution RegEx suivante fonctionnerait –

 subject = 'test "abc" test "abc"'; result = subject.replace(/"([A-Za-z ]*)"/ig, "“$1”"); alert(result); 

Si vous utilisez PHP, vous pourriez écrire un code similaire en PHP – (mes compétences en PHP manquent un peu cependant! Le code ci-dessous a été généré avec RegEx Buddy, donc il n'a pas été testé et peut-être besoin d'être modifié)

 $subject = 'test "abc" test "abc"'; $result = preg_replace('/"([A-Za-z ]*)"/i', '“$1”', $subject); 

Alternativement, vous pouvez charger le contenu dans un DIV à l'aide de PHP puis utiliser JavaScript pour changer le contenu DIV, voici un peu de JQuery qui ferait le travail –

 $("#contentdiv").text($("#contentdiv").text().replace(/"([A-Za-z ]*)"/ig, "“$1”")); 

Il y a un jsfiddle qui démontre le JQuery ci-dessus ici .

Dans le cas où vous disposez d'une chaîne de caractères comme test "abc" test "abc" , vous pouvez vérifier pour chaque " si cela devrait être ouvert ou fermé en regardant combien " ont précédé:

Si c'est un montant égal, il devrait être “ , Sinon ” .

 var str = 'test "abc" test "abc"'; var splitted = str.split('"'); var result = ''; for(var i = 0; i < splitted.length; i++) { result += splitted[i] + ( i % 2 == 0 ? '&ldqou;' : '&rdquo;' ); } result = result.substring(0, result.length - 7); // remove last appended &ldquo;