Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Пропадают табуляция и перевод строки.
 
 автор: Navigator   (16.08.2009 в 03:24)   письмо автору
 
 

Здравствуйте!
Извините не правильно назвал тему.
Есть выражение, оставил то что счел нужным:
$text = (string)(preg_replace("/[^\w\x21\x28\x29x\x2B\x2C\x2D\x2E\x3A\x3F\x40\x7F-\xFF\s]/", " ", $text));

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

  Ответить  
 
 автор: heed   (16.08.2009 в 14:07)   письмо автору
 
   для: Navigator   (16.08.2009 в 03:24)
 

Всмысле сделать \x2B-\x2E
?

а так если от пробела , и cp1251
<?php
header
('Content-type:text/html; charset=cp1251');
?>
<style>
td {padding:2px 15px}
u {color:red}
</style>
<?
$re 
"/[^\w\x21\x28\x29x\x2B\x2C\x2D\x2E\x3A\x3F\x40\x7F-\xFF\s]+/";

$str '';
echo 
'<table style="font:bolder 1.5ex Lucida Console;">
<tr><td>'
;
 for (
$p 32$i 0$p 256$p++, $i++)
 {
 
 if( 
$i == 16 ) {
    echo 
'</td><td>' preg_replace($re'<u>$0</u>'$str)
        . 
"</td></tr><tr><td>\n";
      
$str '';
      
$i 0;
  }
 
printf"%2X "$p);
  
$str .= chr($p);
}
echo 
'</td><td>' preg_replace($re'<u>$0</u>'$str)
    . 
'</td></tr></table>' ."\n";
?>

//upd
тестил на opera
В IE7 половина букв отвалилась (из-за того что для него надо было указывать кодировку windows-1251 вместо cp1251)

  Ответить  
 
 автор: Navigator   (16.08.2009 в 16:33)   письмо автору
 
   для: heed   (16.08.2009 в 14:07)
 

Нет -
 ^\x2B-\x2E
- это мы оставим только + , - .

  Ответить  
 
 автор: Navigator   (16.08.2009 в 18:07)   письмо автору
 
   для: heed   (16.08.2009 в 14:07)
 

У меня вот из этого
~!@#$%^&*()_+|{}:"<>?[];',./
Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
q  w  e  r  t  y  u  i  op  a  s  d  f  g  h j k l z x c v b n   m
`1234567890-=\
`123456*-=\qwerty-[]asdfgh+'zxcvbn,/
ёйцукенгшщзхъфывапролджэячсмитьбю.
ЙЦУКЕНГГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,
O O O O O OOOO W T L Ё ё 
!"#$%&'()*+,-./@O&#161;&#162;&#163;¤&#165;¦§&#168;©&#170;«¬­®&#175;°±&#178;&#179;&#180;µ¶&#184;&#188;&#189;&#190;&#191;&#192;&#228;&#246;&#706;&#707;&#714;&#715;&#847;&#900;&#9786;&#9788;&#9792;&#9794;&#706;<>&#707;<>

в форме получается (проверка -в mysql - из mysql) вот это в браузерах (в т.ч.IE 6.0):
 !@ *() + : ? ,.
Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
q w e r t y u i op a s d f g h j k l z x c v b n m
1234567890-=
123456*-= qwerty- asdfgh+ zxcvbn,
ёйцукенгшщзхъфывапролджэячсмитьбю.
ЙЦУКЕНГГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,
O O O O O OOOO W T L Ё ё
! ()*+,-. @O&#161;&#162;&#163;¤&#165;¦§&#168;©&#170;«¬­®&#175;°±&#178;&#179;&#180;µ¶&#184;&#188;&#189;&#190;&#191;&#192;&#228;&#246;&#706;&#707;&#714;&#715;&#847;&#900;&#9786;&#9788;&#9792;&#9794;&#706; 


Еще один вопросик - такой проверки для безопасности хватит или нет.

P.S. У меня все &#111; в виде символов.

  Ответить  
 
 автор: Trianon   (16.08.2009 в 14:14)   письмо автору
 
   для: Navigator   (16.08.2009 в 03:24)
 

внутри тега <pre> тоже пропадает?

  Ответить  
 
 автор: Navigator   (17.08.2009 в 02:12)   письмо автору
 
   для: Trianon   (16.08.2009 в 14:14)
 

Это к сообщению heed или к названию темы?
Мне <pre> не помог никак.

  Ответить  
 
 автор: Trianon   (17.08.2009 в 11:49)   письмо автору
 
   для: Navigator   (17.08.2009 в 02:12)
 

было к Вам. Потом понял, что ошибся.

  Ответить  
 
 автор: heed   (16.08.2009 в 20:40)   письмо автору
 
   для: Navigator   (16.08.2009 в 03:24)
 

для безопастности нужно просто правильно обработать данные
mysql_escape_string заэкранирует всё опасное кроме % и _ если применяется LIKE для сравнения
и применение intval() обезопасит вставку туда где должны быть цифры.

В такой кодировке в поля типа TEXT db лезет всё , если только не сделать SET NAMES 'utf8'
перед вставкой.
привёл просто код чтобы увидеть какие конкретно символы (окрашивающиеся в красный) заменятся таким выражением
, даже не понимая для чего это может быть нужно
Но может есть другие причины , например вывод в браузер текста из db без обработки
чтобы небыло <>, или для чего-то ещё используются данные, я не знаю

в дальнейшем использовании могут составить проблему такие как \x00 символы
, но в db они вставляются.
возьмите только \x09\x0d\x0(\t\r\n)a из интервала до \x20(пробела)
, если не нужны \v(Вертикальное Таб) которые тоже входит в \s
, и если ненужны управляющие символы типа \x07(beep)
то что в \x7F-\xBF может слегка по разному отображаться в разных шрифтах
, но оно выводится нормально , если кодировка cp1251.
Для вывода в браузер сгодится и htmlspecialchars() , если content-type:text/html


// upd
только пригляделся

>8;&#179;&#180;µ¶&#184;&#188;&#189;&#190;&#1

в какой кодировке делаете страницу ?

  Ответить  
 
 автор: Navigator   (17.08.2009 в 02:22)   письмо автору
 
   для: heed   (16.08.2009 в 20:40)
 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

при коннекте с db:

$mysql_connect = mysql_connect($dbhost, $dbusername, $dbpass);
mysql_query("SET NAMES 'utf8'");

Сначала использовал htmlspecialchars() и preg_replace с массивом всяких кавычек и слешей, но потом начитался в форумах, что рег.выр. работают быстрее и надежнее (если првильно их составить конечно).
Основная цель обезопасить доску объявлений от всяких исследователей - "а что будет если..."
Может подскажете : использовать или нет рег.выр. и если да то какое?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования