2012-02-20 4 views
0

J'ai un champ de formulaire son donner ci-dessous.
chaîne php remplacer sans trouver un mot

`<form method='post'> 
    <input type='hidden' name='var'/> 
    <input type='hidden' name='en_word' value='HOME'/> 
    <input type='text' name='new_word'/> 
    <input type='hidden' name='en_word' value='REWARD'/> 
    <input type='text' name='new_word'/> 
    <input type='hidden' name='en_word' value='LEADERBOARDS'/> 
    <input type='text' name='new_word'/> 
    <input type='submit'> 
</form>` 

Quand je suis entré quelque chose et cliquez sur le bouton d'envoi, il exécutera un fichier fonction d'écriture (fwrite) .Si je suis entré dans le premier champ d'entrée puis je clique sur le bouton d'envoi, je vais obtenir « la maison » et « tout ce que je entré". maintenant je veux remplacer dans translation.php pour НАЧАЛО avec le nouveau mot entré ("Home" => "НАЧАЛО"). Je n'ai pas НАЧАЛО. Maintenant, je veux remplacer le mot d'entrée s'il n'existe pas dans translation.php.

$var = $_POST['var']; 
     $new_words = $_POST['new_words']; 
     $en_word = $_POST['en_word']; 
     for($i=0; $i<count($var); $i++) 
     { 
     $file = '/www/translation.php'; 
     $handle = fopen($file, "r"); 
     $input = fread($handle, filesize($file)); 
     $stringData = html_entity_decode($new_words[$i], ENT_COMPAT, 'UTF-8'); 
     $first_str = "\"$en_word[$i]\""."=>"; 
     $string="\"$stringData\"".",\n"; 
     fclose($handle); 
     if(!eregi($first_str,$input) && !eregi($string,$input)) 
     { 
      $myFile = "/www/translation.php"; 
      //echo $en_word[$i]; 
      $fh = fopen($myFile, 'a') or die("can't open file"); 
      $stringData = "\"$en_word[$i]\""."=>"; 
      fwrite($fh, $stringData); 
      $stringData = html_entity_decode($new_words[$i], ENT_COMPAT, 'UTF-8'); 
      fwrite($fh, "\"$stringData\"".",\n"); 
      fclose($fh); 
     } 
     elseif (eregi($first_str,$input) && !eregi($string,$input)) 
     { 

// here I want to replace the input word if not exist in translation.php. 
     }` 
    } 

Voici le translation.php

translation.php contiennent une chaîne.

"HOME" => "НАЧАЛО", 
"REWARDS" => "НАГРАДИ", 
"LEADERBOARDS" => "КЛАСАЦИИ", 
"LOGIN | SIGN UP" => "ВХОД/РЕГИСТРАЦИЯ", 
"STORE" => "МАГАЗИН", 
"LOGOUT" => "ИЗХОД", 
"SET" => "ПОТВЪРДИ", 


Maintenant, je veux remplacer le mot d'entrée si ne pas exister dans translation.php. Comment puis-je faire cela? Est-ce possible? Aidez-moi, s'il vous plaît.
Désolé! Si la question n'est pas compréhensible, dites-moi si je vais vous expliquer clairement.

+0

Eh bien, vous devez remplacer une partie ou l'ensemble. Savez-vous même ce que vous voulez remplacer ?? – jribeiro

+0

quel est votre objectif ici? – jribeiro

+0

si je suis entré dans le premier champ de saisie, puis cliquez sur le bouton Soumettre, je vais obtenir "maison" et "tout ce que j'ai entré". maintenant je veux remplacer dans translation.php pour НАЧАЛО avec le nouveau mot entré ("Home" => "НАЧАЛО"). est-il clair maintenant ?? mais je ne peux pas obtenir de valeur НАЧАЛО. – yogi46

Répondre

0

S'il vous plaît changer votre code html à ceci:

`<form method='post'> 
<input type='hidden' name='var'/> 
<input type='hidden' name='en_word[]' value='HOME'/> 
<input type='text' name='new_word'/> 
<input type='hidden' name='en_word[]' value='REWARD'/> 
<input type='text' name='new_word'/> 
<input type='hidden' name='en_word[]' value='LEADERBOARDS'/> 
<input type='text' name='new_word'/> 
<input type='submit'> 

`

Sinon, le poste ne sera havethe dernière valeur en_word. S'il vous plaît vérifier si cela fonctionne maintenant et revenir.

Merci

+0

Laissez cette question s'il vous plaît veuillez vérifier ce [lien] (http://stackoverflow.com/questions/9362672/can-i-replace-a-string-without-find-string-in-php) – yogi46

+0

merci pour la relecture rapide. – yogi46

0

Alors vous avez un fichier php qui comprend des traductions pour certains mots clés comme « HOME » et « RÉCOMPENSES ». vous avez alors un formulaire pour changer la traduction de ces mots-clés. Soumettez vous voulez remplacer les anciennes traductions par de nouvelles.

Peut-être que ce code peut vous aider à résoudre votre problème. Je charge d'abord l'ensemble du fichier translation.php dans $ contents, puis j'effectue une recherche preg_replace & replace on.

<?php 
// prepare $find and $replace for preg_replace. 
$find = array("HOME", "REWARD"); 
$replace = array("whatever", "foobar"); 

// convert $find into regular expressions for the whole line 
foreach ($find as $i => $key) 
    $find[$i] = '~("'.$key.'"\s*=>\s*")[^"]*(",\r?\n?)~u'; 

// convert $replace to use the first and second part of any match 
// and put the new translation in between 
foreach ($replace as $i => $translation) 
    $replace[$i] = '$1'.$translation.'$2'; 

// read translation.php 
$contents = file_get_contents("translation.php"); 

// do the replacements 
$contents = preg_replace($find, $replace, $contents); 

// debug output, just delete later 
var_dump($find, $replace, $contents); 

// you want to save your changes into translation.php 
// file_put_contents("translation.php", $contents); 
?> 

si vous devez gérer plus de quelques valeurs dans votre translation.php, envisagez d'utiliser une base de données comme MySQL pour le faire. changer les valeurs et même avoir plusieurs langues est beaucoup plus facile avec mysql.

il y a aussi une bibliothèque spéciale pour le traitement des traductions du texte: http://php.net/manual/de/book.gettext.php

+0

Basti s'il vous plaît répondre à cette [question aussi] (http: // stackoverflow.com/questions/9362672/can-i-remplacer-une-chaîne-sans-trouver-chaîne-dans-php) – yogi46

+0

Cette réponse a donné une nouvelle idée merci beaucoup Basti :) – yogi46

+0

vous êtes les bienvenus. c'est fondamentalement la même question. il suffit de mettre $ find = array ($ en_word); et $ replace = array ($ new_word); et commence la chose. – Basti