¿Cómo puedo hacer coincidir una palabra rusa en una cadena (también en ruso) en PHP?¿Cómo puedo asociar una palabra rusa usando preg_replace en PHP?
Así, por ejemplo, algo como esto:
$pattern = '/слово/';
preg_replace($pattern, $replacement, $string_in_russian)
me trató utf8_encode
y htmlentities
con UTF-8 para el patrón de bandera $, pero no funcionó. ¿Debería también codificar $ string_in_russian?
Actualización: Sugerencia para/u bandera no funcionaba, así que estoy poniendo el código real que necesito esto para. Es a partir de un complemento de glosario para Wordpress (mi sitio está configurado correctamente para usar el idioma ruso, y funciona, pero no en este caso). Así que aquí está el código
$glossary_title = $glossary_item->post_title;
$glossary_search = '/\b'.$glossary_title.'s*?\b(?=([^"]\*"[^"]\*")\*[^"]*$)/iu';
$glossary_replace = '<a'.$timestamp.'>$0</a'.$timestamp.'>';
$content_temp = preg_replace($glossary_search, $glossary_replace, $content, 1);
Cuando hago un eco rápido al comentario HTML este es el tipo de cuerda que me pasa por el patrón
/\bсловоs*?\b(?=([^"]*"[^"]")[^"]*$)/iu
Y así, que todavía no parece funcionar. Pensé que tal vez era la "s" la que me estaba jodiendo (este nivel de expresiones regulares está un poco más allá de mí, pero supongo que está ahí para posibles plurales), pero eliminarlo no ayudó.
Actualización # 2: Bueno por lo que decidió hacer un completo "pizarra en blanco" prueba - simple archivo PHP con algunas cadenas de contenido $ en palabras rusas y de destino Inglés y de reemplazar. Aquí está el código
$content_en = 'Nulla volutpat pretium nunc, ac feugiat neque lobortis vitae. In eu sapien sit amet eros tincidunt viverra. <b style="color:purple">Proin</b> congue hendrerit felis, et consequat neque ultrices lobortis. <b style="color:purple">Proin</b> luctus bibendum libero et molestie. Sed tristique lacus a urna semper eget feugiat lacus varius. Donec vel sodales diam. <b style="color:purple">Proin</b> fringilla laoreet purus, a facilisis nisi porttitor vel. Nullam ac justo ac elit laoreet ullamcorper vel a magna. Suspendisse in arcu sapien.';
$find_en = 'proin';
$replace_with_en = '<em style="color:red">REPLACEMENT</em>';
$glossary_search = '/\b'.$find_en.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)/iu';
$content_en_replaced = preg_replace($glossary_search, $replace_with_en, $content_en);
$content_ru = 'Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации "Здесь <b style="color:purple">ваш</b> текст.. Здесь <b style="color:purple">ваш</b> текст.. Здесь <b style="color:purple">ваш</b> текст.." Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию.';
$find_ru = 'ваш';
$replace_with_ru = '<em style="color:red">Многие</em>';
$glossary_search = '/\b'.$find_ru.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)/iu';
$content_ru_replaced = preg_replace($glossary_search, $replace_with_ru, $content_ru);
Y aquí está una captura de pantalla de la salida http://www.flickr.com/photos/iliadraznin/5372578707/
Como se puede ver el texto Inglés había sustituido la palabra objetivo, mientras que el ruso no tiene y el código es idéntico y yo estoy usando la bandera/u. El archivo también está codificado en UTF-8. ¿Alguna sugerencia? (y de nuevo, intenté eliminar la "s", todavía nada)
en la Rusia soviética, ruso palabra expresiones regulares partido USTED! – goat