2017-06-09 35 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. 
相关问题