2013-03-29 11 views
5

Sto tentando di scrivere tutte le parole in maiuscolo in una stringa php ma la funzione non rileva una parola che viene immediatamente seguita da una parentesi. Come posso fare in modo che una parola direttamente dopo una parentesi sia in maiuscolo?Php capitalizza parola dopo parentesi

Esempio: amarico (ethiopian) .... amarico (Etiopia)

(attualmente utilizzando ucwords(), PHP visualizza amarico (ethiopian))

risposta

16

Questo è un known bug che richiede che vi sia spazio bianco tra parentesi aperta e prima lettera. Ecco una soluzione:

$var = "amharic (ethiopian)"; 

echo str_replace('(', '(', ucwords(str_replace('(', '(', $var))); 

Risultato

Amharic (Ethiopian)

See the demo

+0

utilizzandolo in drupal: Attenzione: strtr() si aspetta che il parametro 1 sia stringa, matrice data in format_string() – Francesco

+0

@Francesco Questa domanda è contrassegnata [tag: PHP] – Kermit

0

Penso che il problema è che php sta per capitalizzare il primo carattere dopo lo spazio e perché la parentesi quadra è solo un carattere dopo lo spazio, quindi è considerato come il primo carattere nella parola deve essere in maiuscolo e altri caratteri Seguire che sono considerati come i personaggi di questo mondo

quindi, per ovviare a questo penso che si deve fare spazio tra staffa e caratteri in modo php in grado di rilevare la staffa come un singolo carattere e non un inizio carattere di una parola :)

7

Prova questo, l'ho provato,

$text= "amharic (ethiopian)"; 
echo mb_convert_case($text, MB_CASE_TITLE, "UTF-8"); 

uscita: amarico (etiope)

Nota: Sembra che la funzione mbstring su PHP deve essere abilitato.

0

Per chiunque altro abbia bisogno di classificare il caso attorno ad altri caratteri inclusi trattini, parentesi e parentesi. È possibile utilizzare regex con preg_replace_callback per acquisire una parola divisa con un trattino o inizia con un carattere non in alfabeto.

/** Capitalize first letter if string is only one word **/ 
    $STR = ucwords(strtolower($STR)); 

/** Correct Title Case for words with non-alphabet charcters ex. Screw-Washer **/ 
    $STR = preg_replace_callback('/([A-Z]*)([^A-Z]+)([A-Z]+)/i', 
     function ($matches) { 
      $return = ucwords(strtolower($matches[1])).$matches[2].ucwords(strtolower($matches[3])); 
      return $return; 
     }, $STR); 
1

Questi utilizzo funzione di parola segreta con staffa in maiuscolo dopo staffa

function ucWordWithBracket($edit){ 
     $new_word = str_replace("(","(",$edit); 
     $temp = ucwords($new_word); 
     $new_word = str_replace("(","(",$temp); 
     return $new_word; 
    } 

ucWordWithBracket (amarico (ethiopian))

uscita di funcation è "amarico (Etiopia)";

Problemi correlati