2014-02-14 6 views
1

Согласно HTML::Entities documentation, второй аргумент encode_entities:

В небезопасных символов задается с помощью регулярного выражения класса (синтаксис, что вы найдете в квадратных скобках в регулярных выражениях).

набор по умолчанию символов для кодирования являются управляющими символами, высокими разрядные символы, и <, &,>, "и" символы.

Однако страница не дает пример того, что эквивалентный аргумент был бы для установленного по умолчанию.Я хотел бы внести незначительную корректировку в набор небезопасных символов без регрессии.

Какой класс символов регулярного выражения был бы эквивалентен & # x00AB; контрольные символы, бит с высоким битом символов и <, &,>, 'и "& # x00BB; который я могу использовать в качестве отправной точки?

ответ

3

Согласно module source, это выглядит следующим образом:

/([^\n\r\t !\#\$%\(-;=?-~])/ 

От этого бита в encode_entities:

# Encode control chars, high bit chars and '<', '&', '>', ''' and '"' 
$$ref =~ s/([^\n\r\t !\#\$%\(-;=?-~])/$char2entity{$1} || num_entity($1)/ge; 

Не-Инвертированный класс:

/([\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff<&>'"])/ 
+0

я на самом деле смотрел на источник, и не думаю, что инвертированный символьный класс будет работать в качестве аргумента метода - но мне кажется, что я был неправ! Тем не менее, я буду ждать зеленой проверки - я бы предпочел неотрицаемый класс персонажей. –

+2

@RichardJPLeGuen Почему имеет значение, если класс символа отрицается? Если вы не хотите кодировать определенный символ, добавьте его в список; если вы хотите его закодировать, удалите его. Обратите внимание, что диапазоны возможны (он уже включает '\ (-;' и '? - ~'). – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot - Спасибо! Я не понял, что это диапазоны и предположил, что мне не хватает моего регулярного выражения, но теперь это имеет гораздо больше смысла. –

1

Похоже, это стандартное замещение regex:

s/([^\n\r\t !\#\$%\(-;=?-~])/$char2entity{$1} || num_entity($1)/ge 

https://metacpan.org/pod/HTML::Entities

+0

Это точно тот же ответ, который дал Джим Дэвис. – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot Извините, я был медленнее. :( – alex