• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نمایش یک کاراکتر خاص
#1
دوستان سلام
نمی دونم چرا بعضی وقت ها تو تکست اریا که متن وارد می کنم ، آخرین کاراکتر یه علامت سوال هست که درون یه کادر ؟؟؟؟
چرا این جوری می شه ؟؟؟؟
  پاسخ
تشکر شده توسط :
#2
موقع وارد کردن یا موقع نمایش؟

utf-8 رو ست کردی؟

سند UTF-8 without BOM هست؟
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط : jpeka7
#3
این کار رو کردم . من متن را با textarea دریافت می کنم و تو db ذخیره می کنم و مقع نمایش که واکشی می کنم همه رو درست و فارسی نشون می ده فقط و فقط آخرین کاراکتر این بلا سرش میاد . نمی دونم چرا؟Huh
  پاسخ
تشکر شده توسط :
#4
البته نمیدونم ربطی داره به این یا نه، ولی با یه ویرایشگر مثل Notepad++ کدتون رو باز کنید و encoding اون رو UTF-8 without BOM کنید، احتمالاً درست شه...
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط : jpeka7
#5
احتمالا تعریف ستون جدول شما که متن درش ذخیره شده صحیح نیست. collation اون باید UTF-8 باشه.

البته یک دلیل دیگه هم میتونه این باشه که کل متن رو استفاده نمیکنید و با توابعی مثل substr بخشی از اون رو جدا و استفاده میکنید.
  پاسخ
تشکر شده توسط : hamid_80386 jpeka7
#6
(۱۳۹۱ اردیبهشت ۱۳, ۰۹:۳۷ ب.ظ)vejmad نوشته: احتمالا تعریف ستون جدول شما که متن درش ذخیره شده صحیح نیست. collation اون باید UTF-8 باشه.

البته یک دلیل دیگه هم میتونه این باشه که کل متن رو استفاده نمیکنید و با توابعی مثل substr بخشی از اون رو جدا و استفاده میکنید.

فک کنم روش اولتون مشکل دوستمون باشه .چون منم چند وقت پیش این مشکل رو داشتم.
  پاسخ
تشکر شده توسط :
#7
فقط کاراکتر آخر هست پس مشکل انکدینگ نیست.
از substr استفاده کردی؟
طول فیلدت چقدره؟
  پاسخ
تشکر شده توسط :
#8
(۱۳۹۱ اردیبهشت ۱۴, ۱۲:۰۵ ق.ظ)admin نوشته: فقط کاراکتر آخر هست پس مشکل انکدینگ نیست.
چرا انکدینگ میتونه موجب مشکل در آخرین کاراکتر بشه.
حالا میپرسی چطوری، جوابش اینه:
فرض کن یک ستون با انکدینگ غیر UTF-8 تعریف کردیم برای متن و اون انکدینگ تک بایتی است.
فرضا ما حداکثر طولش رو 15 گرفتیم.
هر حرف فارسی به 2 بایت فضا نیاز داره.
پس با 7 حرف فارسی 14 بایت از 15 بایت پر میشه.
و یک بایت باقی میمونه.
اگر طول متنی که در اون ستون تلاش به اینزرت شده باشه بیشتر از 7 حرف فارسی بوده باشه، در نتیجه از حرف آخر تنها یک بایت در آخرین بایت باقی مانده از فضای فیلد ذخیره میشه.
به این شکل آخرین بایت یک مقدار غیرمجاز در انکدینگ UTF-8 خواهد داشت که احتمال داره بصورت علامت سوال نشون داده بشه.

البته بنده هم فکر میکنم احتماش کمه مشکل ایشون این بوده باشه، چون این حالت وقتی چند شرط لازم جمع باشن رخ میده و درصورت وقوع بنظرم بقدر کافی قابل تشخیص/حدس و رفع کردن است. ولی بهرحال از نظر تئوریک و ذهنی این حالت به ذهنم اومد که گفتم ممکنه مشکل از UTF-8 نبودن انکدینگ ستون جدول بوده باشه.

در substr کردن هم دقیقا چیز مشابهی پیش میاد که آخرین کاراکتر ناقص میشه. چون PHP ساپورت Native از یونیکد نداره و توابع رشته ای اون عملیات رو بر اساس کاراکترهای تک بایتی انجام میدن.
  پاسخ
تشکر شده توسط : hamid_80386 admin jpeka7
#9
من مشکل مشابهی تو حالت cross browing داشتم، اونجا بعضی کاراکتر ها به لوزی و علامت سوال تبدیل میشدن، چون cross بود میدونستم حتماً encoding هست
ولی اینجا فکر کنم دوست عزیز vejmad قشنگ توضیح داد
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط : vejmad
#10
منظورت از cross browing چیه؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان