Dans htmlentities, comment encoder sélectivement les symboles afin qu'ils n'encodent pas les <
et >
de tags mais encodent &
?PHP htmlentities
Répondre
utiliser Just:
<?php
$string = str_replace('&', '&', $string);
Référez-this pour plus de détails sur str_replace de documents officiels.
Essayez quelque chose comme ceci:
$string = htmlentities($string);
$string = str_replace(array('<','>'), array('<', '>'), $string);
à la documentation officielle, htmlentities et str_replace
err ... dans le deuxième exemple, vous avez oublié un paramètre – thejh
Wow, et qui a dû être édité .. Merci. –
@Col On dirait que le post original voulait utiliser htmlentities pour encoder tout sauf < and > –
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('>', '>', str_replace('<', '<', 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('&', '&', $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.
Parlez-vous de ".:;,!?"? Si oui, pourquoi voulez-vous les encoder? Ou parlez-vous des guillemets? – thejh
1. N'utilisez jamais les htmlentities. 2. n'encodez jamais rien à côté de '<' and '>', '&' et guillemets. –
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