Используя regexp решать этот вид проблемы, плохая идея и вероятно введет неудобный в сопровождении и ненадежный код. Лучше используйте синтаксический анализатор HTML .
В этом случае лучше разделить процесс на две части:
, я предположу, что Ваш документ не xHTML строгий, таким образом, Вы не можете использовать синтаксический анализатор XML. НАПРИМЕР, с этим исходным кодом веб-страницы:
/* preg_match_all match the regexp in all the $html string and output everything as
an array in $result. "i" option is used to make it case insensitive */
preg_match_all('/]+>/i',$html, $result);
print_r($result);
Array
(
[0] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[...]
)
)
Тогда мы получаем все атрибуты тега img с циклом:
$img = array();
foreach( $result as $img_tag)
{
preg_match_all('/(alt|title|src)=("[^"]*")/i',$img_tag, $img[$img_tag]);
}
print_r($img);
Array
(
[] => Array
(
[0] => Array
(
[0] => src="/Content/Img/stackoverflow-logo-250.png"
[1] => alt="logo link to homepage"
)
[1] => Array
(
[0] => src
[1] => alt
)
[2] => Array
(
[0] => "/Content/Img/stackoverflow-logo-250.png"
[1] => "logo link to homepage"
)
)
[] => Array
(
[0] => Array
(
[0] => src="/content/img/vote-arrow-up.png"
[1] => alt="vote up"
[2] => title="This was helpful (click again to undo)"
)
[1] => Array
(
[0] => src
[1] => alt
[2] => title
)
[2] => Array
(
[0] => "/content/img/vote-arrow-up.png"
[1] => "vote up"
[2] => "This was helpful (click again to undo)"
)
)
[] => Array
(
[0] => Array
(
[0] => src="/content/img/vote-arrow-down.png"
[1] => alt="vote down"
[2] => title="This was not helpful (click again to undo)"
)
[1] => Array
(
[0] => src
[1] => alt
[2] => title
)
[2] => Array
(
[0] => "/content/img/vote-arrow-down.png"
[1] => "vote down"
[2] => "This was not helpful (click again to undo)"
)
)
[] => Array
(
[0] => Array
(
[0] => src="http://www.gravatar.com/avatar/df299babc56f0a79678e567e87a09c31?s=32&d=identicon&r=PG"
[1] => alt="gravatar image"
)
[1] => Array
(
[0] => src
[1] => alt
)
[2] => Array
(
[0] => "http://www.gravatar.com/avatar/df299babc56f0a79678e567e87a09c31?s=32&d=identicon&r=PG"
[1] => "gravatar image"
)
)
[..]
)
)
Regexps являются ЦП, интенсивным, таким образом, можно хотеть кэшировать эту страницу. Если у Вас нет системы кэша, можно настроить собственное при помощи ob_start и загружающийся / сохраняющий от текстового файла.
Первый, мы используем preg_ match_ весь , функция, которая получает каждое сопоставление строк шаблон и ouput он в, он - третий параметр.
regexps:
]+>
Мы применяем его на все веб-страницы HTML. Это может быть считано как [1 110] каждая строка, которая запускается с" ", содержит не">" символ и заканчивается a> .
(alt|title|src)=("[^"]*")
Мы применяем его последовательно на каждый тег img. Это может быть считано как [1 111] каждая строка, запускающаяся с "высокого звука", "заголовка" или "src", тогда "=", тогда '"', набор материала, которые не являются '"' и концы с a '"'. Изолируйте подстроки между () .
Наконец, каждый раз Вы хотите иметь дело с regexps, это удобный для имения хороших инструментов для быстрого тестирования их. Проверьте это regexp тестер онлайн .
РЕДАКТИРОВАНИЕ: ответьте на первый комментарий.
Это верно, что я не думал о (надо надеяться, немногие) люди, использующие одинарные кавычки.
ну, если Вы используете только', просто заменяют весь "'.
, Если Вы смешиваете обоих. Сначала необходимо хлопнуть себя:-), затем попытайтесь использовать (" | ') вместо этого или" и [^Гё] для замены [^ "].
Для этого нет простого решения. Что я, вероятно, сделал бы, так это создал несколько скриптов с языковыми текстами для каждого языка и включил подходящий в PHP.
На самом деле вам вообще не нужен JQuery.
Объект навигатора в javascript ( http://www.comptechdoc.org/independent/web/cgi/javamanual/javanavigator.html ) содержит пользовательский язык (IE) и язык (Netscape / Firefox) свойство, установленное текущим языковым стандартом браузера.
Для решения вашего примера вы можете использовать что-то вроде:
var textToSet = null; var userLang = null; /* -if userLanguage exists they're in IE, else firefox -get the first two letters in lowercase to guarantee an easily evaluated base language */ if(navigator.userLanguage) baseLang = substring(navigator.userLanguage,0,2).toLowerCase(); else baseLang = substring(navigator.language,0,2).toLowerCase(); //check languages switch(baseLang) { case "de": //German textToSet = "german text"; break; default: textToSet = "english text"; } document.getElementById('elementToSetTextInto').innerHTML = textToSet;
Имейте в виду, вам может потребоваться другой текст на основе базового языка и локали .. в этом случае ищите " en-us »,« де-де ». Сайты с кодами культуры легко найти в Google (1 ссылка только на первое сообщение;))
Надеюсь, что у вас получится.
Попробуйте это. Кнопка TranslateThis - это легкий виджет перевода на Javascript. Он быстро переводит любую страницу, используя AJAX и Google Language API.