2010-11-05 6 views
2

Dans htmlentities, comment encoder sélectivement les symboles afin qu'ils n'encodent pas les < et > de tags mais encodent &?PHP htmlentities

+2

Parlez-vous de ".:;,!?"? Si oui, pourquoi voulez-vous les encoder? Ou parlez-vous des guillemets? – thejh

+1

1. N'utilisez jamais les htmlentities. 2. n'encodez jamais rien à côté de '<' and '>', '&' et guillemets. –

+2

La bonne solution à ce problème est susceptible d'être "Oubliez les entités de codage et assurez-vous juste que vous déclarez le codage de caractères que vous utilisez": http://www.w3.org/International/O-charset – Quentin

Répondre

3

utiliser Just:

<?php 
$string = str_replace('&', '&amp;', $string); 

Référez-this pour plus de détails sur str_replace de documents officiels.

1

Essayez quelque chose comme ceci:

$string = htmlentities($string); 
$string = str_replace(array('&lt;','&gt;'), array('<', '>'), $string); 

à la documentation officielle, htmlentities et str_replace

+0

err ... dans le deuxième exemple, vous avez oublié un paramètre – thejh

+0

Wow, et qui a dû être édité .. Merci. –

+0

@Col On dirait que le post original voulait utiliser htmlentities pour encoder tout sauf < and > –

2

Vous ne recevez pas une option « partiellement encode »; S'il y a des caractères particuliers que vous voulez échapper ou non, vous devrez le faire manuellement. Par exemple, pour faire ce que vous dites vous voulez:

str_replace('&gt;', '>', str_replace('&lt;', '<', htmlentities($s))) 

Qu'est-ce que vous essayez de faire, si? Ce qui précède semble très peu susceptible d'être utile. " caractères dans le balisage seront toujours échappés, mangling valeurs d'attribut. En général, il est également douteux, car à moins que vous ne lui fournissiez l'argument charset approprié, les caractères non-ASCII de la chaîne deviendront des références d'entité HTML incorrectes. Il est généralement préférable d'utiliser htmlspecialchars(), ce qui ne concerne que les quelques caractères qui sont vraiment spéciaux et qui ont besoin d'être échappés en HTML. Si tout ce que vous voulez faire est d'échapper le caractère & vous pouvez le faire avec un simple str_replace('&', '&amp;', $s) mais encore une fois, cela remplacerait encore les esperluettes qui font partie d'une référence d'entité ou de caractère valide. Êtes-vous sûr de vouloir faire ça? Essayez-vous simplement de réparer des esperluettes non échappées incorrectement utilisées? Si c'est le cas, vous pouvez essayer une regex pour sélectionner toute utilisation d'un & qui n'est pas une référence d'entité/caractère valide.

Questions connexes