|
PHP 5.4, preg_match_all и UTF-8
|
|||
---|---|---|---|
#18+
Есть строка-шаблон, в которую на место переменных подставляются значения. Примерно таким образом: Код: php 1. 2. 3. 4. 5. 6.
Затем по найденным позициям я планирую выполнять substr_replace. Проблема в том, что несмотря на модификатор u в массиве $mm смещения найденных переменных указываются не в символах, а в байтах. И это не считается багом . Не подскажите, как это можно решить? Полностью отойти от mb_* и использовать substr/strlen с заданием смещений и размеров в байтах? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 22:45 |
|
PHP 5.4, preg_match_all и UTF-8
|
|||
---|---|---|---|
#18+
В итоге сделал так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Считает правильно, но выглядит как-то не очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 23:46 |
|
PHP 5.4, preg_match_all и UTF-8
|
|||
---|---|---|---|
#18+
Alibek B. Проблема в том, что несмотря на модификатор u в массиве $mm смещения найденных переменных указываются не в символах, а в байтах. И это не считается багом . В случае, если этот флаг указан, для каждой найденной подстроки будет указана ее позиция (в байтах) в исходной строке.Только не царское ж это дело... глядеть в документацию. Alibek B. Есть строка-шаблон, в которую на место переменных подставляются значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 01:01 |
|
PHP 5.4, preg_match_all и UTF-8
|
|||
---|---|---|---|
#18+
Нет, preg_replace не подходит. Во-первых непонятно, как эта функция будет работать с UTF-8. Во-вторых, в строке-шаблоне может быть условный фрагмент (часть шаблона в квадратных скобках полностью пропускается, если внутри шаблона переменные не заданы), причем эти условные фрагменты могут быть вложенными, а регулярные выражения для подобного не подходят. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 01:10 |
|
PHP 5.4, preg_match_all и UTF-8
|
|||
---|---|---|---|
#18+
С utf-8 вполне нормально работает. С хитрым форматом, согласен, не лучшее средство. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 03:07 |
|
PHP 5.4, preg_match_all и UTF-8
|
|||
---|---|---|---|
#18+
В принципе условные фрагменты не основная проблема, я все равно разрезаю строку по этим фрагментам и обрабатываю их отдельно. Но сейчас я одним регулярным выражением ищу все переменные, которые выглядят как <var|fmt@nvl>. Затем прохожусь циклом по найденному и заменяю подстроку в зависимости от того, как указана переменная. А если использовать preg_replace, то мне все-равно нужно будет найти все переменные, а затем для каждой найденной нужно будет делать отдельный preg_replace (потому что подставляемые значения отличаются), причем все это усложняется экранированием символов. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 09:07 |
|
|
start [/forum/topic.php?fid=23&msg=40032785&tid=1459534]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 153ms |
0 / 0 |