8768 sujets

Développement web côté serveur, CMS

Bonjour,

Je rencontre un pble avec certains caracteres d'echappement en PHP.
J ai testé avec 3 modes d'affichage (2 echo normaux et 1 heredoc) : l echappement du simple quote fonctionne ... idem pour le double quote ... en revanche rien ne fonctionne avec \t ou \n ...
Je suis sur Windows 10.
J'ai testé sur wampserver : KO ; sur serveur interne de php en localhost : ko egalement.
Mais sur PowerShell (en invite de commande), ca fonctionne normalement.

Ce qui m'interpelle c'est qu'à l'affichage dans firefox (mais sur edge idem) ca ne fonctionne pas mais pourtant le code source de la page a bien pris en charge l echappement !

Comment est ce possible que le navigateur n affiche pas ce qui est dans le code source de la page ? !

Le code de la page de test :

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>test Echappement</title>
</head>

<body>
<!-- Firefox 66.0.2 (64 bits) -->
<!-- php 7.2.14 sur serveur WAMPSERVER 3 1 7 (64 bits) -->

<?php
	$test='soleil';

	echo '<br> "$test" est la \t variable.';
	echo "<br> \"$test\" est la \t variable.";
	echo '<br>';
	echo <<<html
	"$test" est la \t \n variable.
html;
?>

</body>
</html>


et voila les copies ecran :
upload/1554141132-61012-affichage.png
"\n" et "\t" sont interprétés par le navigateur pour le code source de la page.
<br> est l'équivalent html de "\n".
tu peux utiliser la fonction php nl2br pour transformer les "\n" en <br>.

Attention \n et \t fonctionnent seulement avec les guillemets double.

Après je n'ai pas trop compris ce que tu veux obtenir à l'écran.
Merci pour ta reponse.

Dans mes programmes PHP, l'echappement pour les quotes fonctionnent normalement.

En revnachen l'echappement avec \t et \n ne fonctionnent pas. Je ne les utilisais donc pas car on peut effectvement faire autrement ( <br> ...) mais quand meme , je voudrais bien savoir pourquoi.

La 2eme copie d ecran correspond à l'affichage dans firefox, et la suivante, le code source de la page affichee.
Dans l'affichage, la tabulation de fonctionne pas (pas de tabulation entre les mots 'la' et 'variable') alors que dans le code source , il y a bien une tabulation.

J aimerais savoir pour quelle raison la tabulation n est pas affichee alors qu elle existe bien dans le cade source de la page.

Merci beaucoup.
Modérateur
Bonjour, en HTML, toutes les suites de caractères «blancs»: Espace, tabulations, retours à la ligne, etc. sont transformés en une et une seule espace. Cela permet d'indenter et de mettre en page le code comme on le souhaite, sans incidence sur l'affichage.

Seule exception, la balise <pre> ou la propriété css «white-space: pre» ou «white-space: pre-wrap» qui gardent le formatage dans le code source (C'est ce qui est appliqué sur un textarea par exemple). Mais ce n'est pas une bonne pratique de l'utiliser, sauf cas particulier (affichage de code source, de certaines données externes brutes, etc.)
Modifié par kustolovic (02 Apr 2019 - 00:42)
Meilleure solution
Merci beaucoup.

Effectivement, à la place de la tabulation, il y avait un espace à la place.

J'ai repris le livre "PHP 7 avancé" et l auteur précise en effet, concernant les caracteres d'echappement, que dans le cas d'une page HTML, le changement de ligne par ' \n ' (par exemple) affiche un changement de ligne dans le code source (quand on clique dans le navigateur 'afficher le code source ') mais pas dans le rendu du navigateur.

Encore merci.