Question

J'ai un texte dans la base de données MySQL qui est demandé dans « $ description » et je voudrais savoir si \\\\\\\\r\\\\\\\\n est présente dans la description. Donc je suis:

if(strpos($description, "\\\\\\\\r\\\\\\\\n") !== FALSE) {
echo "String is here.";
} else {
echo "String not found.";
}

mais cette commande affiche toujours "String not found." et je crois qu'il ya une mauvaise fuite dans la chaîne recherchée (de \\\\\\\\r\\\\\\\\n). Comment puis-je strpos par \\\\\\\\r\\\\\\\\n? De plus, je finirais probablement str_replace-ment tous les \\\\\\\\r\\\\\\\\n avec \r\n que quelqu'un a fait une mauvaise fuite des fonctions et des données sont arrivées comme \\\\\\\\r\\\\\\\\n au lieu de \r\n, donc un str_replace fait face au même problème aussi. Je pourrais utiliser l'aide sur l'une de ces tâches (str_pos, str_replace).

Merci beaucoup.

Était-ce utile?

La solution

Le caractère regrettable de la détection du caractère anti-slash est parce qu'il est aussi le caractère universel échapper. Et de mettre un anti-slash dans une chaîne, vous devez échapper - avec elle-même

C'est-à-dire si vous voulez détecter un à barre oblique inverse, votre code pourrait ressembler à ceci

if(strpos($description, '\\' ) !== FALSE)

Par conséquent, si vous voulez détecter huit, antislashs consécutifs, votre chaîne à match contre aura besoin que deux -. Seize

if(strpos($description, '\\\\\\\\\\\\\\\\' ) !== FALSE)

Par conséquent, votre dernier match à l'aide strpos() devrait ressembler à ceci

if(strpos($description, '\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\n' ) !== FALSE)

aussi remarqué que je suis passé à guillemets simples. En effet, \n et \r sont interprétés à l'intérieur de littéraux de chaîne entre guillemets.

Vous pouvez aussi le faire avec des expressions régulières, ce qui va être un peu plus souple et puissant

if ( preg_match( "/\\x5C{8}[rn]/", $description ) )

EDIT

Pour la recherche-remplacement, je suggère quelque chose comme ça. Comme je l'ai mentionné plus haut, l'expression régulière va être plus puissant - celui-ci correspondra \r ou \n (et pas seulement quand ils sont adjacents) avec toute quantité d'antislash précédentes, non seulement 8 d'entre eux

.
$description = preg_replace( "/\\x5C+([rn])/", '\\\${1}', $description );

Autres conseils

if(strpos($description, '\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\n') !== FALSE) {
echo "String is here.";
} else {
echo "String not found.";
}

en outre la lecture

<?php
$in = "abc";
if(preg_match('/\n|\r/',$in)){
    echo 'found';
}else{
    echo 'not found';
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top