2015-08-15 1 views
2
<?php 
$offset =0; 
if (isset ($_POST['text']) && isset($_POST['searchfor'])&&isset($_POST['replacewith'])) 
{ 
$text = $_POST['text']; 
$search = $_POST['searchfor']; 
$replace = $_POST['replacewith']; 

$length = strlen($search); 

if (!empty($_POST['text'])&& !empty($_POST['searchfor'])&&!empty($_POST['replacewith'])) 
{ 
while ($stringpos = strpos($text, $search, $offset)) 
{ 
$offset = $stringpos + $length; 
$text = substr_replace($text, $replace, $stringpos, $length); 
} 
echo $text; 
} 
else 
{ 
echo 'Please fill in all the fields'; 
} 

} 

?> 

<form action=53fineandreplace.php method="POST"> 
<textarea name = "text" rows="6" cols = "30"></textarea><br><br> 
Search For:<br> 
<input type= "text" name = "searchfor"><br><br> 
Replace with:<br> 
<input type="text" name = "replacewith"><br><br> 
<input type = "submit" value = "Submit"> 
</form> 

Si le mot à remplacer est le premier mot ou le seul mot dans la chaîne alors cela ne fonctionne pas mais si le mot à remplacer est dans toute autre position sauf la première alors ça marche bien.pourquoi ce php substr_replace() ne remplace pas le premier mot

Répondre

0

Vous pouvez utiliser la fonction php ci-dessous str_replace et de réaliser facilement

Syntaxe

str_replace(find,replace,string,count) 

trouver -> Il est nécessaire field.Specifies la valeur pour trouver

remplacer - > Champ obligatoire.Spécifie la valeur à remplacer par la valeur

chaîne -> Il est nécessaire field.Specifies la chaîne à rechercher

comte -> Il est variable en option field.A qui compte le nombre de remplacements

1

strpos retourne la position de l'aiguille ($search) se trouve dans la botte de foin ($text). S'il est trouvé au début de la, strpos renverra 0, que PHP traite comme false, et ainsi terminer la boucle while sans même y entrer. Une façon de résoudre ce problème est d'utiliser pour distinguer entre un FALSE booléenne et un entier 0 l'opérateur !==:

while (!($stringpos = strpos($text, $search, $offset)) !== FALSE) 
0

vous devez simplement utiliser la boucle Do While car il exécutera au moins une fois, mais vous devez faire la variable dans la première instruction if juste comme ceci

if (isset($_POST['text']) && isset($_POST['replace_what']) && isset($_POST['replace_with'])){ 
    $text=$_POST['text']; 
    $search=$_POST['replace_what']; 
    $replace=$_POST['replace_with']; 
    $string_length=strlen($search); 
    $offset=0; 
    $strpos=0; 
    if (!empty($text) && !empty($search) && !empty($replace)) { 


    do{ 
     $offset= $strpos + $string_length; 
     $text=substr_replace($text,$replace,$strpos,$string_length); 




    }while ($strpos= strpos($text,$search,$offset));