Bonjour,

Je dirige un site internet sous Wordpress. Il y a des formulaires pour que les membres puissent se répondre entre eux sur diverses sujets grâce a un thème spécial pour petites annonces.

Seulement j'ai un problème, dans les courriels que les personnes reçoivent pour communiquer entre elles, ben il y a plein de \r\n\r\ et de \, je sais que faire pour les enlever, alors qu'elles sont pas dans le formulaire.

Je sias que ce problème à été traité sur le net, mais là, j'y pige pas tout clairement, et c'est trop varié, ma question est précise.

Merrrrrrrrrrci

<?php
/*
Template Name: Page Publish
*/
?>
<?php get_header(); ?>

<div class="clear"></div>
<div class="grid_12 adform form" id="content_main">
  <?php
      if ($_POST){
		  $error = false;
		  $resp = recaptcha_check_answer (get_option('wpClassifieds_private_key'),$_SERVER["REMOTE_ADDR"],$_POST["recaptcha_challenge_field"],$_POST["recaptcha_response_field"]);
		  if(!$resp->is_valid) {
			  $error = true;
			  $error_text .= __('The captcha is wrong!', "wpct")."<br />";//wrong email address
      	  }
      	  if(!isEmail(cP("email"))) {
		  	  $error = true;
		  	  $error_text .= __('Not valid email address', "wpct")."<br />";//wrong email address
      	  }
	  	  if(isSpam(cP("name"),cP("email"),cPR("description"))) {//check if is spam!
		  	  $error = true;
		  	  $error_text .= __('Ups!Spam? if you are not spam contact us.', "wpct")."<br />";
	  	  }
	  	  if (cP("category") == "-1") {
		  	  $error = true;
		  	  $error_text .= __('Please select a category', "wpct")."<br />";
	  	  }
	  	  else {
		  	  global $wpdb;
		  	  $category_ids = $wpdb->get_col("SELECT `term_id` FROM $wpdb->term_taxonomy WHERE taxonomy='category'");
		  	  if (!in_array(cP("category"), $category_ids)) {
			  	  $error = true;
			  	  $error_text .= __('The category selected does not exist','wpct') . "<br />";
		  	  }
	  	  }
	  	  if(cP("title") == "" || cP("description") == "") {
		  	  $error = true;
		  	  $error_text .= __('Please complete the mandatory fields.', "wpct")."<br />";
	  	  }
	  	  if ( regions() ) {
		  	  if (cP("region") == "-1") {
			  	  $error = true;
			  	  $error_text .= __('Please select a region', "wpct")."<br />";
		  	  }
		  	  else {
			  	  if (!in_array(cP("region"), regions()) && cP("region") != "-1") {
				  	  $error = true;
				  	  $error_text .= __('The region selected does not exist','wpct') . "<br />";
			  	  }
		  	  }
	  	  }
	  	  //image check 
	  	  if (get_option('wpClassifieds_max_img_num','4')>0){	
		  	  $image_check=true;
		  	  $image_upload=false;//nothing to upload
		  	  $types=split(",",get_option('wpClassifieds_img_types','gif,jpeg,png'));//creating array with the allowed types
		  	  for ($i=1;$i<=get_option('wpClassifieds_max_img_num','4')&&$image_check;$i++){
			  	  $file_size = $_FILES["pic$i"]['size'];
			  	  $file_type = $_FILES["pic$i"]['type'];
			  	  if ($file_size > get_option('wpClassifieds_max_img_size','1000000')) {//control the size
				  	  $image_check=false;//is to big then false
				  	  $error = true;
				  	  $error_text .=__('Picture', "wpct")." $i ".__('Upload pictures max file size', "wpct")." ".(get_option('wpClassifieds_max_img_size','1000000')/1000000)."Mb<br />";				
			  	  }
			  	  elseif ($file_type!=""){//the size is right checking type
				  	  $image_check=false;//not allowed
				  	  foreach ($types as $ac_type){//to find allowed types
					  	  if (strpos($file_type, $ac_type)) $image_check=true;//allowed one
				  	  }
			  	  }//end else
			  	  if (!$image_check) {
				  	  $error = true;
				  	  $error_text .=__('Picture', "wpct")." $i no ".__('format', "wpct")." ".get_option('wpClassifieds_img_types','gif,jpeg,png')."<br />";
			  	  }
			  	  if (file_exists($_FILES["pic$i"]['tmp_name'])) $image_upload=true;//there's someting to upload
		  	  }//end for			
	  	  }//end if img
	  	  //end image check
	  	  if (!$error){
		  	  if (is_numeric(cP("price"))) $price=cP("price");
		  	  else unset($price);
		  	  // post information
          	  $data = array
          	  (
        	  	  'post_title' => cP("title"),
              	  'post_content' => cPR("description"),
              	  'post_status' => "draft",
			  	  'post_category'	=> array(cP("category")),
			  	  'tags_input'	=> cP("tags")
          	  );
		  	  // insert post
		  	  $published_id = wp_insert_post($data);
		  	  $post_password = generatePassword();
		  	  // add custom fields
		  	  if ($price!="") add_post_meta($published_id, 'price', cP("price"), true);
		  	  if (cP(place)!="") add_post_meta($published_id, 'place', cP("place"), true);
		  	  if (cP(contact_name)!="") add_post_meta($published_id, 'contact_name', cP("contact_name"), true);
		  	  if (cP(email)!="") add_post_meta($published_id, 'email', cP("email"), true);
		  	  if (cP(phone)!="") add_post_meta($published_id, 'phone', cP("phone"), true);
		
		  	  if (regions()) {
			  	  if (cP(region)!="") {
				  	  add_post_meta($published_id, 'region', cP("region"), true);
				  	  add_post_meta($published_id, '_region_slug', friendly_url(cP("region")), true);
			  	  }
		  	  }
						
		  	  add_post_meta($published_id, 'password', $post_password, true);
		  	  add_post_meta($published_id, 'ip', getIp(), true);
		
		  	  // images upload
		  	  if (get_option('wpClassifieds_max_img_num','4')>0&&$image_upload){
			  	  $upload_array = wp_upload_dir();
			  	  $img_upload_dir = trailingslashit($upload_array['basedir']).get_option('wpClassifieds_img_upload_dir','wpclassifieds')."/".date("Y")."/".date("m")."/".date("d");
			  	  if (!file_exists($img_upload_dir)) mkdir($img_upload_dir, 0777, true);
			  	  for ($i=1;$i<=get_option('wpClassifieds_max_img_num','4');$i++){
				  	  $img_upload_file = trailingslashit($img_upload_dir).$published_id."-".$i.strrchr($_FILES["pic$i"]['name'],'.');
				  	  if (move_uploaded_file($_FILES["pic$i"]['tmp_name'],$img_upload_file)){
					  	  $post_images .= get_option('wpClassifieds_img_upload_dir','wpclassifieds')."/".date("Y")."/".date("m")."/".date("d")."/".$published_id."-".$i.strrchr($_FILES["pic$i"]['name'],'.').",";
				  	  }
			   	  }
			  	  add_post_meta($published_id, 'images', $post_images, true);
		  	  }
		
		  	  //EMAIL notify
		  	  if (get_option('permalink_structure') != '' ) {
		  	  	  $linkConfirm=get_permalink(get_option('wpClassifieds_edit_page_id'))."?post=$published_id&pwd=$post_password&action=confirm";
		  	  	  $linkEliminate=get_permalink(get_option('wpClassifieds_edit_page_id'))."?post=$published_id&pwd=$post_password&action=delete";
		  	  	  $linkEdit=get_permalink(get_option('wpClassifieds_edit_page_id'))."?post=$published_id&pwd=$post_password&action=edit";
		  	  }
		  	  else {
		  	  	  $linkConfirm=get_permalink(get_option('wpClassifieds_edit_page_id'))."&post=$published_id&pwd=$post_password&action=confirm";
		  	  	  $linkEliminate=get_permalink(get_option('wpClassifieds_edit_page_id'))."&post=$published_id&pwd=$post_password&action=delete";
		  	  	  $linkEdit=get_permalink(get_option('wpClassifieds_edit_page_id'))."&post=$published_id&pwd=$post_password&action=edit";
		  	  }

		  	  $body= get_option('wpClassifieds_mail_confirm');
		  	  $body= str_replace(array("{SITE_NAME}", "{TITLE_OF_AD}", "{CONFIRM_LINK}", "{EDIT_LINK}", "{ELIMINATE_LINK}"), array(get_bloginfo('name'), cP("title"), $linkConfirm, $linkEdit, $linkEliminate), $body);

              $subject="[".get_bloginfo('name')."] ".__('Important ! Confirmez votre annonce', "wpct");
		  	  $headers = 'From: '.get_bloginfo('name').' <'.get_the_author_meta('user_email',1).'>' . "\r\n\\";
		  	  wp_mail(cP(email),$subject,$body,$headers);
												
		  	  $error_text = __('Thank you! Check your email inbox to confirm your ad', "wpct");
		  	  $submitted_ad = true;
	  	  }
      }//if post
      ?>
  <?php if (!$submitted_ad) : ?>
  <h1>
    <?php the_title(); ?>
  </h1>
  <?php if (get_option("wpClassifieds_post_message") != "") : ?>
  <div class="intro"> <?php echo get_option('wpClassifieds_post_message'); ?> </div>
  <?php endif; ?>
  <?php if ($error_text) { echo "<div class=\"error-msg\">$error_text</div>"; }?>
  <form action="" method="post" enctype="multipart/form-data">
    <fieldset>
      <div class="field">
        <label for="category">Categorie</label>
        <select name='category' id='category' class='postform' >
          <option value="-1">Selectionner une cat&eacute;gorie</option>
	<option class="level-0" value="3"></option>
	<option class="level-0" value="7">Amour</option>
	<option class="level-0" value="8">Amiti&eacute;</option>
        </select>
      </div>
      <div class="field">
        <label for="title">
          <?php _e('Title', "wpct");?>
        </label>
        <input id="title" name="title" type="text" value="<?php echo cP("title");?>" class="ico_title" />
      </div>
      <div class="field">
        <label for="price">Age <small>
          <?php _e('Chiffres seulement', "wpct");?>
          </small></label>
        <input id="price" name="price" type="text" value="<?php echo cP("price");?>" class="ico_age" />
      </div>
      <div class="field">
        <label for="description">
          <?php _e('Detailed description', "wpct");?>
        </label>
        <textarea id="description" name="description" cols="10" rows="5"><?php echo cPR("description");?></textarea>
      </div>
      <?php if ( regions() ) : ?>
      <div class="field">
        <label for="region">R&eacute;gion</label>
        <select id="region" name="region">
          <option value="-1">-- S&eacute;lectionnez une r&eacute;gion --</option>
          <option value="-1">- France m&eacute;tropolitaine -</option>
          <option value="Alsace">Alsace</option>
          <option value="Aquitaine">Aquitaine</option>
          <option value="Auvergne">Auvergne</option>
          <option value="Bourgogne">Bourgogne</option>          
          <option value="Bretagne">Bretagne</option>
          <option value="Centre">Centre</option>
          <option value="Champagne-Ardenne">Champagne-Ardenne</option>
          <option value="Corse">Corse</option>
          <option value="Franche-Comt&eacute;">Franche-Comt&eacute;</option>
          <option value="&Icirc;le-de-France">&Icirc;le-de-France</option>
          <option value="Languedoc-Roussillon">Languedoc-Roussillon</option>
          <option value="Limousin">Limousin</option>
          <option value="Lorraine">Lorraine</option>
          <option value="Mont&eacute;r&eacute;gie">Mont&eacute;r&eacute;gie</option>
          <option value="Nord-du-Qu&eacute;bec">Nord-du-Qu&eacute;bec</option>
          <option value="Outaouais">Outaouais</option>
          <option value="Saguenay-Lac-Saint-Jean">Saguenay-Lac-Saint-Jean</option>
        </select>
      </div>
      <?php endif; ?>
      <div class="field">
        <label for="place">Pr&eacute;cision<small>Facultatif</small></label>
        <input id="place" name="place" type="text" value="<?php echo cP("place");?>" class="ico_globe"/>
      </div>
      <div class="field">
        <label for="contact_name">Pseudo</label>
        <input id="contact_name" name="contact_name" type="text" value="<?php echo cP("contact_name");?>" class="ico_person" />
      </div>
      <div class="field">
        <label for="email">Courriel<small>Ne sera pas publi&eacute;. <br />
          Il permet de te contacter et de valider  ton annonce</small></label>
        <input id="email" name="email" type="text" value="<?php echo cP("email");?>" class="ico_mail" />
      </div>
      <div class="field">
        <label for="phone">
          <?php _e('Your contact phone number (published)', "wpct");?>
          <small>Facultatif</small></label>
        <input id="phone" name="phone" type="text" value="<?php echo cP("phone");?>"  class="ico_mobile" />
      </div>
      <div class="field">
        <label for="tags">Mots-clefs (s&eacute;par&eacute; par des virgules)</label>
        <input id="tags" name="tags" type="text" value="<?php echo cP("tags");?>" class="ico_tag" />
      </div>
      <?php if (get_option('wpClassifieds_max_img_num','4')>0) : ?>
      <div class="field">
        <label>Maximum : 1MB <small><?php echo __('format', "wpct")." ".get_option('wpClassifieds_img_types','gif,jpeg,png'); ?></small></label>
        <div class="clear"></div>
      </div>
      <?php for ($i=1;$i<=get_option('wpClassifieds_max_img_num','4');$i++) : ?>
      <div class="pictures">
        <label>
          <?php _e('Picture', "wpct");?>
          <?php echo $i?></label>
        <input type="file" name="pic<?php echo $i?>" id="pic<?php echo $i?>" value="<?php echo $_POST["pic".$i];?>" />
      </div>
      <?php endfor; ?>
      <?php endif; ?>
      <div class="field">
        <label>Entrez le code de v&eacute;rification</label>
        <script type="text/javascript">
 			  var RecaptchaOptions = {
			  theme : 'clean',
			  };
		    </script>
        <?php echo recaptcha_get_html(get_option('wpClassifieds_public_key')); ?> </div>
    </fieldset> 
    <center><textarea name="" cols="5" rows="7" class="ico_tag" >Toute consultation partielle du site ou &eacute;l&eacute;ments (images, vid&eacute;o, etc&hellip;) entra&icirc;ne l&rsquo;acceptation des pr&eacute;sentes Conditions G&eacute;n&eacute;rales d&rsquo;Utilisation (CGU). 

J&rsquo;ai lu le paragraphe ci-dessus, j&rsquo;en accepte le texte int&eacute;gral incluant les quatorze paragraphes et je d&eacute;cide de continuer en connaissance de cause, sur gay-express.fr.</textarea></center>
    <div id="submit">
      <input name="Submit" value="<?php _e('Publish', "wpct");?>" type="submit" class="submit" />
    </div>
  </form>
  <?php endif; ?>
  <?php if ($error_text and $submitted_ad) :  ?>
  <h1>
    <?php the_title(); ?>
  </h1>
  <div class="error-msg"><?php echo $error_text; ?></div>
  <?php endif; ?>
</div>
<?php get_footer(); ?>
Bonjour,
Si le probléme était simple il y aurait un mini TOPO que tout le monde comprendrait Smiley cligne
Je vais essayé de débrousailler cela,
Donc je m'occupes que du \ seul (apres on verra \n\r)
il faut que tu acceptes que ton serveur selon son paramétrage fasse des choses automatiquement.
Parmis ces choses une seule intéresse ton sujet :le paramétre de php.ini
qui détermine si PHP met automatiquement des \ la ou c'est utile.
il sagit de
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
Qui comme tu le vois sont a Off c'est devenu une norme,
Donc avant c'était a ON et donc il te mettait partout des \ pour protéger les caractéres spéciaux dans les bases de données, les FORM, les FILES ...


<?php
echo get_magic_quotes_gpc();         // 1 donc a ON
echo $_POST['lastname'];             // L\' oreille
echo addslashes($_POST['lastname']); // L\\\' oreille
//==voila il a mis \ pour protéger deux caractéres spéciaux
//==il fallait donc les supprimer comme ceci
if (get_magic_quotes_gpc()) {
    $lastname = stripslashes($_POST['lastname']); // L' oreille

}
else {
    $lastname = $_POST['lastname'];
}

// Si tu utilise MySQL la bonne formule est maintenant
$lastname = mysql_real_escape_string($lastname);
echo $lastname; // L\' oreille
$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
?> 


Bon je sais le Dimanche je suis mal réveillée alors comme tu as tout au dessus
je redit en qq lignes
1) si dans php.ini magic_quotes_gpc = ON PHP te mettra partout des \
sur les caractéres spéciaux
2) si c'est sur Off tu maitrise et si tu en as besoins tu utilises addslashes

Donc que tu ais protégé tes données parceque tu était en 1) ou avec addslashes (2)
tu annule quand tu veux par stripslashes.

Maintenant on n'utilise plus cela ALORS adoptes la règle suivante:

a écrit :
METS DANS php.ini
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

N'UTILISES PLUS JAMAIS
addslashes
stripslashes

Par contre avant toute envoie vers Mysql utilises

mysql_real_escape_string


Attention, mysql_real_escape_string ne peut'étre utilisé que lorsque
tu as fait ta connection a Mysql

Attention pas de mysql_real_escape_string avec PDO lui il fait tout tout seul !

=============================================================

Voila j'ais terminé avec \
Par contre tes retours de chariots (\r\n) , ils viennent des retour de chariot de ceux qui écrivent dans les TEXTAREA ou de la lecture de fichiers texte.
Je ne peux pas te dire quoi faire , mais je peux te dire comment je fais tu verras toi !

Je réécris toujours sans rien toucher mes TEXAREA ou FILES.
en effet j'ais ainsi, si les gens veulent modifier , tout leus \r\n
en place !

Par contre je supprimes les \r (parasites)
Et je supprimes les doubles saut


$a=str_replace("\n\n","\n",$a);
$a=str_replace("\r","",$a);


Voila !
Enfin pour clore le sujet, lorsque je dois afficher (non pas dans un TEXTAREA mais en HTML

$a=str_replace("\n","<br />",$a);
Hey! Smiley biggrin Smiley biggrin Smiley biggrin Smiley biggrin

Ton post m'a bien aidé et c'est en trifouillant, et en lutant que je suis arrivé à quelque chose d'a peu près correct :

if (!$error){
                //generate the email to send to the client that is contacted
                $subject="[expertos] ".__('Re:', "wpct")." ".get_the_title();
                $body=cP("contact_name")." (".cP("email").") ".__('contacted you for the Ad', "wpct")."\n".get_permalink()." \n \n".cP("msg")." \n \n";
				[b]$body=str_replace('\r\n',' ',$body); [/b]

                $headers = "MIME-Version: 1.0\r\n"; 
			
                $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";                         
                $headers = 'From: '.cP("contact_name").' <'.cP("email").'>' . "\r\n\\";
                wp_mail(get_post_meta(get_the_ID(), "email", true),$subject,$body,$headers);
                                                            
                $error_text = "<div class=\"error-msg3\"><p>".__('Message sent, thank you.', "wpct")."</p></div>";
            }


avec ça, j'ai réussi à virer ses maudits \r\n des messages envoyés entre membres par courriel

En tout cas milles merci à toi ! Smiley murf
moust a écrit :
il existe la fonction nl2br() qui permet de convertir des caractères \n\r en <br />.

Concernant les \ devant les caractères spéciaux, tu peux te tourner vers la fonction stripslashes().


Je me demandes pourquoi j'ais écris tout ce résumer sur ce probléme, pour lire finalement d'utiliser nl2br() Smiley eek

et encore mieux stripslashes() qui n'est plus util si les nouvelles rêgles sont respectées !