2010-08-29 9 views
5

Estoy tratando de reemplazar en una cadena todos los caracteres que no sean de palabra con cadena vacía, espere espacios y junte todos los espacios múltiples como un solo espacio.PHP mb_ereg_replace no reemplaza mientras que preg_replace funciona como estaba previsto

El siguiente código hace esto.

$cleanedString = preg_replace('/[^\w]/', ' ', $name); 
$cleanedString = preg_replace('/\s+/', ' ', $cleanedString); 

Pero cuando intento usar mb_ereg_replace no pasa nada.

$cleanedString = mb_ereg_replace('/[^\w]/', ' ', $name); 
$cleanedString = mb_ereg_replace('/\s+/', ' ', $cleanedString); 

$ cleanedString es lo mismo que si $ nombre en el caso anterior. ¿Qué estoy haciendo mal?

Respuesta

10

mb_ereg_replace no utiliza separadores. Puede o no tener que especificar la codificación antes.

mb_regex_encoding("UTF-8"); 
//regex could also be \W 
$cleanedString = mb_ereg_replace('[^\w]', ' ', $name); 
$cleanedString = mb_ereg_replace('\s+', ' ', $cleanedString); 
+0

Gracias fue el error que cometí. Si mi entrada es UTF-8 ¿hay alguna recomendación con respecto a qué método usar? – Jithin

+0

@Jithin Si es UTF-8, también podría usar 'preg_replace' con el indicador' u': 'preg_replace ('/ \ s +/u', '', $ cleanedString);' – Artefacto

+0

@Artefacto Gracias. ¿Puede decirme si es seguro suponer que siempre que la entrada esté en codificación UTF-8, el preg_replace funcionará para la mayoría de los idiomas? – Jithin

-3

La entrada no es Multi-Byte por lo que la función mb falla.

+0

bien. Pero, ¿pueden explicar cuándo debemos usar mb_ereg_replace en lugar de preg_replace si mi entrada está en UTF-8? Actualmente aprobé el texto en inglés como $ name. Pero si mañana utilizo algún otro idioma, ¿mi hindi se romperá mi código? – Jithin

+0

Incorrecto. La extensión multibyte puede manejar codificaciones de un solo byte. – Artefacto

+0

@Artefacto: OK, mi mal. – shamittomar

-1
function create_slug_html($string, $ext='.html'){  
    $replace = '-';   
    $string=strtolower($string);  
    $string=trim($string); 

    mb_regex_encoding("UTF-8"); 
    //regex could also be \W 
    $string= mb_ereg_replace('[^\w]', ' ', $string); 
    $string= mb_ereg_replace('\s+', ' ', $string); 

    //remove query string  
    if(preg_match("#^http(s)?://[a-z0-9-_.]+\.[a-z]{2,4}#i",$string)){   
     $parsed_url = parse_url($string);   
     $string = $parsed_url['host'].' '.$parsed_url['path'];   
     //if want to add scheme eg. http, https than uncomment next line   
     //$string = $parsed_url['scheme'].' '.$string;  
    }  
    //replace/and . with white space  
    $string = preg_replace("/[\/\.]/", " ", $string); 

    // $string = preg_replace("/[^a-z0-9_\s-]/", "", $string); 

    //remove multiple dashes or whitespaces  
    $string = preg_replace("/[\s-]+/", " ", $string); 

    //convert whitespaces and underscore to $replace  
    $string = preg_replace("/[\s_]/", $replace, $string);  
    //limit the slug size  
    $string = substr($string, 0, 200);  
    //slug is generated  
    return ($ext) ? $string.$ext : $string; 

}

favor compruebe que está bien y apoyar Inglés y Unicode

+0

Aunque las respuestas de solo código no están prohibidas, por favor, comprendan que esta es una comunidad de preguntas y respuestas, en lugar de una fuente de crowdfunding, y que, normalmente, si el OP entendía que el código se publicaba como respuesta, él/ella habría encontrado una solución similar por sí mismo , y no habría publicado una pregunta en primer lugar. Como tal, proporcione contexto a su respuesta y/o código explicando * cómo * y/o * por qué * funciona. – XenoRo

Cuestiones relacionadas