2017-06-09 70 views
1

我正在嘗試做一些能夠保持文本大寫/小寫的翻譯器。 我需要在PHP字符串和MySQL查詢中替換它。如何用另一個字符串替換字符串並在php和mysql中保留大小寫?

例子:

Potato is jumping all over the PLACE. 
Potato is jumping all over the pLAcE. (optional) 
Potato is jumping all over the place. 
Potato is jumping all over the Place. 

我想用 '花園' 來代替單詞 '地點'。

Potato is jumping all over the GARDEN. 
Potato is jumping all over the gARdEe. (optional) 
Potato is jumping all over the garden. 
Potato is jumping all over the Garden. 

它也應該用短語。

回答

0

所以我設法創造到底我自己的函數。感謝您的幫助和靈感。

function replaceWithCase($source, $replacement, $string, $pos = 0) { 

    while (($pos = strpos(strtolower($string), strtolower($source), $pos))!== false) { 
     $substr = mb_substr($string, $pos, strlen($source)); 
     $remaining = mb_substr($string, $pos + strlen($source)); 

     if (ctype_upper($substr)) { 
      $string = substr_replace($string,strtoupper($replacement),$pos,strlen($source)); 
      continue; 
     } 

     $substrParts = preg_split('//u', $substr, null, PREG_SPLIT_NO_EMPTY); 
     $replaceParts = preg_split('//u', $replacement, null, PREG_SPLIT_NO_EMPTY); 
     $newWord = ''; 

     foreach ($replaceParts as $k => $rp) { 
      if (array_key_exists($k,$substrParts)) 
       $newWord .= ctype_upper($substrParts[$k]) ? mb_strtoupper($rp) : mb_strtolower($rp); 
      else 
       $newWord .= $rp; 
     } 
     $string = substr_replace($string,$newWord,$pos,strlen($source)); 
     $pos = $pos + strlen($source); 
    } 

    return $string; 
} 

echo replaceWithCase("place", "garden", "Potato is jumping all over the PLACE"); 
echo "<br>"; 
echo replaceWithCase("jumping", "running", "Potato is jumping all over the pLAcE"); 
echo "<br>"; 
echo replaceWithCase("jumping", "cry", "Potato is jumping all over the place"); 
echo "<br>"; 
echo replaceWithCase("all", "", "Potato is jumping all over the Place"); 
echo "<br>"; 
echo replaceWithCase(" ", ";", "Potato is jumping all over the Place", 10); 
echo "<br>"; 

輸出:

Potato is jumping all over the GARDEN 
Potato is running all over the pLAcE 
Potato is cry all over the place 
Potato is jumping over the Place 
Potato is jumping;all;over;the;Place 
1

我已經創建了一個函數,它會替換你的單詞並保留這些單詞。

function replaceWithCase($source, $replacement, $string) { 
    // Does the string contain the source word? 
    if (strpos($string, $source) === false) { 
     return false; 
    } 

    // If everything is uppercase, return the replacement fully uppercase 
    if (ctype_upper($source)) { 
     return str_replace($source, strtoupper($replacement)); 
    } 

    // Set an array to work with 
    $characters = array(); 

    // Split the source into characters 
    $sourceParts = explode('', $source); 

    // Loop throug the characters and set the case 
    foreach ($sourceParts as $k => $sp) { 
     if (ctype_upper($sp)) { 
      $characters[$k] = true; 
     } else { 
      $characters[$k] = false; 
     } 
    } 

    // Split the replacement into characters 
    $replacementParts = explode('', $replacement); 

    // Loop through characters and compare their case type 
    foreach ($replacementParts as $k => $rp) { 
     if (array_key_exists($k, $characters) && $characters[$k] === true) { 
      $newWord[] = strtoupper($rp); 
     } else { 
      $newWord[] = strtolower($rp); 
     } 
    } 

    return substr_replace($source, implode('', $newWord), $string); 
} 

// usage 
echo replaceWithCase('AppLes', 'bananas', 'Comparing AppLes to pears'); 

注:這是未經測試,可能需要一些調整

1
function stringReplace($findStr, $replaceStr, $str) 
{ 
    $isLowerStr = true; 
    for($i=0; $i<strlen($findStr); $i++){ 
     if(ord($findStr[$i]) >= 97 && ord($findStr[$i])<=122){ 
      if(ord($replaceStr[$i]) >= 65 && ord($replaceStr[$i])<=96){ 
       $replaceStr[$i] = strtolower($replaceStr[$i]); 
      }else{ 
       $replaceStr[$i] = $replaceStr[$i]; 
      } 
     }else{ 
      $isLowerStr = false; 
      $replaceStr[$i] = strtoupper($replaceStr[$i]); 
     } 
    } 
    if($isLowerStr == false){ 
     if(strlen($replaceStr) > strlen($findStr)){ 
      for($i=0;$i<(strlen($replaceStr)-strlen($findStr));$i++){ 
       if(strtoupper($findStr) == $findStr){ 
         $replaceStr[strlen($findStr)+$i] = strtoupper($replaceStr[strlen($findStr)+$i]); 
       }else{ 
        $replaceStr[strlen($findStr)+$i] = strtolower($replaceStr[strlen($findStr)+$i]); 
       } 
      } 
     } 
    } 
    echo str_replace($findStr, $replaceStr, $str);die; 
} 
$findStr = 'Place'; 
$replaceStr = 'garden'; 
echo stringReplace($findStr, $replaceStr, 'Potato is jumping all over the '.$findStr.'.'); 
0
Use "stripos" php function 


$str = 'Potato is jumping all over the pLAcEs.'; 
$str_new = "garden"; 

$str1 = str_split($str_new); 
$pos = stripos($str,'places'); 
$string = substr($str,$pos,6); 

$extrct = str_split($string); 


$var = ''; 

foreach ($extrct as $key => $value) { 
    if(ctype_upper($value)) 
    { 
     $var .= strtoupper($str1[$key]);   
    }else{ 
     $var .= strtolower($str1[$key]);   
    } 
} 



$new_string = str_replace($string, $var, $str); 


echo $new_string; //Potato is jumping all over the gARdEn. 
相關問題