2017-08-16 1 views
1

Salut je veux remplacer toutes les" citations de citation simple », mais pas quand est un point d'ancrageremplacer « » pour « quand est pas une balise d'ancrage en php

par exemple cette

Lorem "ipsum" dolor sit amet, <a href="#">sit amet</a> 

à cette

Lorem 'ipsum' dolor sit amet, <a href="#">sit amet</a> 

im faisant $valFieldBody = str_replace('"', "''", $valFieldBody);

mais tout remplacer "je ne sais pas si je peux utiliser str_replace ou preg_replace funcion avec condition négative comme != ou <>

pourriez-vous s'il vous plaît me aider

grâce

+0

@ WiktorStribiżew merci de m'aider (y) – skycomputer2

+0

@Wiktor Maintenant que vous avez répondu, supprimez vos commentaires. – mickmackusa

Répondre

2

La fonction preg_replace vous permet de faire de multiples combinaisons pour remplacer, dans ce cas, je regarde la chaîne qui remplace uniquement accepte les espaces et les caractères alphanumériques qui sont à l'intérieur ("") dans votre cas la chaîne "ipsum", peut être étendu à d'autres caractères si vous le souhaitez

Exemple avec votre chaîne

Code de mise à jour:

$text='Lorem "ipsum" dolor sit amet, <a href="#">sit amet</a>'; 
$text = preg_replace('/\"([A-Za-z0-9? ,_-]+)\"(?=[^<>]*(?:<|$))/', "'$1'", $text); 
echo $text; 
//out--> Lorem 'ipsum' dolor sit amet, <a href="#">sit amet</a> 

http://php.net/manual/en/function.preg-replace.php

1

Vous pouvez utiliser un SKIP-FAIL regex:

preg_replace('~<[^>]+>(*SKIP)(*F)|"~', "'", $valFieldBody); 

Voir la regex demo.

Motif détails

  • <[^>]+> - Matches <, 1+ Chars autre que >, puis >
  • (*SKIP)(*F) - 2 verbes PCRE en omettant le texte correspondant et rendant ainsi le moteur regex recherche pour la prochaine correspondre après la fin du match en cours
  • | - ou
  • " - une double citation dans d'autres contextes.