PDA

View Full Version : سوال: چرا توی تابع str_replace مقدار ;nbsp& جایگزین نمی شه؟



idocsidocs
سه شنبه 30 خرداد 1391, 21:19 عصر
str_replace(' ','',$str);

MMSHFE
سه شنبه 30 خرداد 1391, 21:51 عصر
رشته اصلی رو میشه بگذارین؟ البته این کد فکر کنم باید اینطوری باشه:

$str = str_replace(' ', '', $str);

idocsidocs
سه شنبه 30 خرداد 1391, 23:01 عصر
مهندس تابع اصلی اینه:


function strip_html($str){
$str=strip_tags($str);
$str=str_replace(' ', '',$str);
if(trim($str)!=''){
return true;
}
return false;
}

رشته ای که به تابع می دم:

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

MMSHFE
چهارشنبه 31 خرداد 1391, 20:27 عصر
اونوقت خروجی که گرفتین چه بوده؟ میشه str$ رو توی تابع قبل از return یکبار echo کنید تا ببینیم کاری انجام شده یا نه؟

idocsidocs
چهارشنبه 31 خرداد 1391, 20:46 عصر
خروجی ;nbsp& هست.

بنظرم ;nbsp& اصلا حذف نمی شه.

idocsidocs
پنج شنبه 01 تیر 1391, 20:55 عصر
مهندس نتونستید مشکل رو پیدا کنید؟

MMSHFE
جمعه 02 تیر 1391, 10:24 صبح
آخه جالبه که همون کد شما بدون هیچ تغییری واسه من درست کار میکنه. درهرحال بجای ;nbsp& از ;amp;nbsp& استفاده کنید، شاید حل شد. من این کد رو امتحان کردم:


function strip_html($str){
$str = strip_tags($str);
$str = str_replace('&nbsp;', '', $str);
echo trim($str);
if(trim($str) != '') {
return true;
}
return false;
}
$string = <<<EOT
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
EOT;
echo strip_html($string);

idocsidocs
جمعه 02 تیر 1391, 11:22 صبح
مهندس مطمئنید که تابع کار می کنه؟

چون با فایرباگ چک کردم و کاراکترهای خالی تولید می شه ولی توی صفحه نمایش داده نمی شن.

وقتی از این تابع استفاده می کنید، روی صفحه کلیک کنید، کاراکترهای خالی رو می تونید ببینید.

MMSHFE
جمعه 02 تیر 1391, 11:26 صبح
من تست کردم. هیچ چیزی توی صفحه نبود. کدی که من گذاشتم رو تست کردین؟ دوست عزیز، اون کارکترهای خالی مال ;nbsp& نیست. مال کارکتر NewLine هست که بین تگهای p گذاشته شده.

idocsidocs
جمعه 02 تیر 1391, 12:50 عصر
کد شما رو نمی شه استفاده کرد.
من مقداری که باید به تابع بفرستم رو از دیتابیس می گیرم و نمی شه اون رو به عملگر <<<EOT بدم.

این خط ارور می ده:

$string=<<<EOT.$row['text'].EOT;
این خط رو باید به چه صورت بنویسم؟

MMSHFE
جمعه 02 تیر 1391, 18:16 عصر
از شما بعیده! اینطوری بنویسید:

$string = $row['text'];
اگه اصرار به استفاده از ساختار HereDoc دارین، اینطوری درسته:


$string = <<<EOT
$row['text']
EOT;

موفق باشید.

idocsidocs
جمعه 02 تیر 1391, 18:28 عصر
مهندس باز هم حل نشد.



من تست کردم. هیچ چیزی توی صفحه نبود. کدی که من گذاشتم رو تست کردین؟ دوست عزیز، اون کارکترهای خالی مال ;nbsp& نیست. مال کارکتر NewLine هست که بین تگهای p گذاشته شده.


این رشته که توی تاپک قرار دادم رو از ادیتور tinymce گرفتم.

امکان داره که ادیتور کاراکترهایی مثل کاراکتر NewLine تولید کنه که من نمی بینم و این کاراکترها کار تابع رو مختل می کنن.

چطور می تونم این کاراکترها رو حذف کنم؟

MMSHFE
جمعه 02 تیر 1391, 18:56 عصر
اینو امتحان کنید:

$str = str_replace(array(PHP_EOL, '&nbsp;'), '', $str);

idocsidocs
جمعه 02 تیر 1391, 20:12 عصر
مهندس این کد هم کار نکرد.

بنظرم بهتره یه روش دیگه استفاده کنم تا مجبور نشم که از این تابع برای چک کردن رشته استفاده کنم.

MMSHFE
جمعه 02 تیر 1391, 20:59 عصر
خوب اینو تست کنید:

$str = str_replace(array('<br />', '&nbsp;'), '', nl2br($str));

idocsidocs
شنبه 03 تیر 1391, 00:30 صبح
این کد هم فایده نداشت.
اگه بتونید خرجی یه ادیتور رو به این تابع بدید، می تونید این تابع رو با شرایطی که من استفاده می کنم تست کنید.

alirezay
پنج شنبه 15 تیر 1391, 16:02 عصر
str_replace('&nbsp;','',$str);


برای جایگزینی فاصله باید به این صورت بنویسید و فقط یک فاصله بگذارید نه معادل هگزاش رو

str_replace(' ','',$str);

idocsidocs
پنج شنبه 15 تیر 1391, 16:23 عصر
این روش هم جواب نداد

MMSHFE
پنج شنبه 15 تیر 1391, 16:47 عصر
یک فرم نمونه با استفاده از ادیتور بسازین و اینجا ضمیمه کنین تا روی همون کار کنیم.

idocsidocs
پنج شنبه 15 تیر 1391, 18:03 عصر
راستش این بحث رو پیگیری نمی کردم دیگه ولی چون دوستمون پست زدن، جواب دادم.

از ادیتور tinymce استفاده می کنم و مقادیر فرم رو توی دیتابیس ذخیره می کنم. بعد توی بخش کاربری قبل از نمایش محتویلا فرم اول با تابعی که دادم، چک می کنم که رشته ای فرم قرار داره یا نه.

فرم چیز خاصی نیست، یه textarea هست که tinymce اون رو به ادیتور تبدیل می کنه.

MMSHFE
جمعه 16 تیر 1391, 11:06 صبح
حقیقتش چون فرصت تست نداشتم گفتم خودتون یک نمونه فرم بگذارین. راستشو بخواین یکم تنبلیم میشه خودم TinyMCE رو Config کنم واسه کار کردن. بعلاوه ممکنه تنظیماتی که من میگذارم با ادیتور شما فرق کنه. شما اگه ممکنه لطف کنید و با همون تنظیماتی که نتونستین ازش جواب بگیرین یک نمونه فرم ضمیمه کنید تا روی همون کار کنم. موفق باشید.

idocsidocs
جمعه 16 تیر 1391, 23:16 عصر
فرم ارسال که یه فرم عادیه.

تنظیمات ادیتور:


tinyMCE.init({

height : "320px",
width : "660px",
convert_urls : false,
editor_selector : "mceEditor",
//editor_deselector : "mceNoEditor",


//body_id : "my_id",
//content_css : "edited.css",

// General options
mode : "textareas",
theme : "advanced",
plugins : "pagebreak,style,layer,table,save,advhr,advimage,ad vlink,emotions,iespell,inlinepopups,insertdatetime ,preview,media,searchreplace,print,contextmenu,pas te,directionality,fullscreen,noneditable,visualcha rs,nonbreaking,xhtmlxtras,template,wordcount,advli st",

// Theme options
theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft, justifycenter,justifyright,justifyfull,styleselect ,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replac e,|,bullist,numlist,|,outdent,indent,blockquote,|, undo,redo,|,link,unlink,anchor,image,cleanup,|,ins ertdate,inserttime,preview,|,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,su p,|,charmap,emotions,iespell,media,advhr,|,print,| ,ltr,rtl,|,fullscreen",
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,st yleprops,|,cite,abbr,acronym,del,ins,attribs,|,vis ualchars,nonbreaking,template,pagebreak,restoredra ft,|,help,code,|,newdocument,",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",

theme_advanced_resizing : false,

// UPLOADE MANAGER
file_browser_callback: "openKCFinder",
// Example content CSS (should be your site CSS)
content_css : "editor_fa.css",
theme_advanced_font_sizes: "10px,12px,13px,14px,16px,18px,20px,26px,38px,40px, 72px",
font_size_style_values : "10px,12px,13px,14px,16px,18px,20px",

// Drop lists for link/image/media/template dialogs
template_external_list_url : "lists/template_list.js",
external_link_list_url : "lists/link_list.js",
external_image_list_url : "lists/image_list.js",
media_external_list_url : "lists/media_list.js",

//DISABLE MESSAGES
accessibility_warnings : false,

// Style formats
style_formats : [
{title : 'Bold text', inline : 'b'},
{title : 'Red text', inline : 'span', styles : {color : '#ff0000'}},
{title : 'Red header', block : 'h1', styles : {color : '#ff0000'}},
{title : 'Example 1', inline : 'span', classes : 'example1'},
{title : 'Example 2', inline : 'span', classes : 'example2'},
{title : 'Table styles'},
{title : 'Table row 1', selector : 'tr', classes : 'tablerow1'}
],

// Replace values for the template plugin
template_replace_values : {
username : "Some User",
staffid : "991234"
}
});