Регулярное выражение не учитывает символы UTF-8 по умолчанию. Мета-символ \ s
учитывает только исходный латинский набор. Поэтому следующая команда удаляет только табуляции, пробелы, возврат каретки и новые строки
// http://stackoverflow.com/a/1279798/54964 $ str = preg_replace ('/ \ s + / ',' ', $ str);
Когда UTF-8 становится основным, это выражение будет чаще останавливаться / останавливаться, когда оно достигает новых символов utf-8, оставляя за ним пробелы \ s
не может учитываться.
Чтобы справиться с новыми типами белых пространств, введенных в unicode / utf-8, требуется более обширная строка для сопоставления и удаления современного пробела.
Потому что регулярные выражения по умолчанию не распознают многобайтовые символы, для их идентификации может использоваться только разделительная мета-строка, чтобы исключить, чтобы сегменты байтов изменялись в других символах utf-8 ( \ x80
в quad set может заменить все байты \ x80
в умных кавычках)
$ cleanedstr = preg_replace ("/ (\ t | \n | \ v | \ f | \r | | \ xC2 \ x85 | \ xc2 \ xa0 | \ xe1 \ xa0 \ x8e | \ xe2 \ x80 [\ x80- \ x8D] | \ xe2 \ x80 \ xa8 | \ xe2 \ x80 \ xa9 | \ xe2 \ x80 \ xaF | \ xe2 \ x81 \ x9f | \ xe2 \ x81 \ xa0 | \ xe3 \ x80 \ x80 | \ xef \ xbb \ xbf) + / "," _ ", $ str);
Здесь учитываются и удаляются вкладки, новые строки, вертикальные вкладки, формы, возврат каретки, пробелы и дополнительно из здесь :
nextline, неразрывные пробелы, разделитель монгольских гласных, [en quad, em quad, en space, em space, пространство три на em, пространство с четырьмя пробелами, пространство с шестью на em, пространство цифр, пространство препинания, тонкое пространство, пространство для волос, пространство с нулевой шириной, нулевой ширины, стопор для нулевой ширины, разделитель нулевой ширины], разделитель строк, разделитель абзацев, узкое пространство без разрыва, среднее математическое пространство, столярный столик, идеографическое пространство и нулевая ширина неразрывное пространство.
Многие из этих хакеров в файлах xml при экспорте из автоматизированных инструментов или сайтов, которые вытесняют текстовый поиск, распознавание и могут быть незаметно вставлены в исходный код PHP, что заставляет парсер перейти к следующей команде (разделители абзацев и строк), которые приводят к пропуску строк кода, что приводит к прерывистым необъяснимым ошибкам, которые мы начали называть «текстологическими заболеваниями»
[ не безопасно копировать и вставлять из Интернета. Используйте защитный код для защиты вашего кода. лол]
Я устанавливаю этот пакет nuget
Install-Package Svg
] Здесь вы можете найти исходный код пакета на github здесь
. Тогда вы можете сделать это:
var svgDocument = SvgDocument. Открытый (путь); using (var smallBitmap = svgDocument.Draw ()) {var width = smallBitmap.Width; var height = smallBitmap.Height; if (width! = 2000) // Я изменяю размер моего растрового изображения {width = 2000; высота = 2000 / маленькийBitmap.Width * высота; } using (var bitmap = svgDocument.Draw (ширина, высота)) // Я снова визуализирую {bitmap.Save (pngPath, ImageFormat.Png); }}
Наслаждайтесь!
Вы можете взглянуть на SVG Rendering Engine на CodePlex. Он имеет перегрузку, которая будет принимать поток в памяти (ваш SVG), который затем может быть использован для преобразования в изображение .
Ссылка на объект, не установленная на экземпляр объекта
, могла бы u помочь plz
– Armance
7 December 2011 в 13:29
Все, что вам нужно сделать, это установить пакет SVG Rendering Library nuget.
Install-Package Svg
И затем
// читаем svg-документ из файловой системы var svgDocument = SvgDocument. Открытый ( "test.svg"); var bitmap = svgDocument.Draw (); // сохранение преобразованного svg в файловую систему bitmap.Save ("test.png", ImageFormat.Png);
Вот и все.