امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
استفاده از آدرس دهی فارسی در کدایگنایتر
#1
سلام

دوستان من میخوام ادرس دهی فارسی رو برای کدایگنایتر فعال کنم.در حال حاضر ادرس دهی من به صورت زیر می‌باشد (آدرس مطالب).
code-igniter.ir/post/the-post-title
حالا می‌خوام ادرس زیر رو هم بهش اضافه کنم.
code-igniter.ir/post/عنوان-پست
از تنظیمات روتر فیلتر رو روی (:any) گذاشتم یعنی هر کارکتری مجازه!
ولی با کاراکترهای فارسی مشکل داره !
راه حلش چیه ؟
پاسخ
#2
سلام

کد ایگنایتر با حروف فارسی و به طور کلی utf-8 مشکل نداره لطفا فایل routes.php رو اینجا قرار بدید تا بررسی بشه.
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
#3
تکیه ای روتر که مربوط به این قضیه هستش.

کد php:
$route['(.*)'] = "post/index/$1"
پاسخ
#4
کد رو به این شکل تغییر بدید:
کد php:
$route['(:any)'] = "post/index/$1"
حالا اگه کنترلر اینطوری باشه:
کد php:
<?php
defined
('BASEPATH') OR exit('No direct script access allowed');

class 
Post extends CI_Controller {

    public function 
index($param1)
    {
        echo 
$param1;
    }


هر آدرس فارسی رو وارد کنید باید روی صفحه چاپ کنه.
مثلا:

کد:
http://localhost/ci3/سلام
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
 سپاس شده توسط HenryFep
#5
ممنون با این روش کار میکنه ولی با بعضی کلمات مشکل داره مثلا کلمه : محصول وقتی در آدرس باشه کار نمیکنه.

راه حل چیه ؟
پاسخ
#6
لینکی که با اون کلمه ساخته شده رو بفرستید تا بررسی بشه
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
#7
برای مثال ادرس زیر

localhost/ci3/محصول
پاسخ
#8
به طور کلی باید آدرس ها رو به خصوص آدرس های فارسی و unicode رو یه سری تغییرات در زمان ثبت در دیتابیس و در زمان خوندن اونها انجام بدید که خیلی ارتباطی با کد ایگنایتر هم نداره.


کد php:
    public function make_slug($slug)
    {
        return 
urlencode(str_replace(' ''-'strtolower(trim($slug))));
    } 

برای دریافت و خوندن آدرس های فارسی حتما باید اون ها رو urldecode کنیم البته اگه داخل دیتابیس به صورت encode شده ذخیره نکرده باشیم.
نکته مهم  اینه که حتما برای ساخت آدرس های فارسی ابتدا روی اونا یه سری عملیات انجام بدیم که همانطور که میبنید یه function ساده با نام make_slug() درست کردم که میاد تعدادی عملیات نظیر حذف فاصله ها، کوچک کردن حروف، جایگزینی فاصله با - و اینکد کردن کلمه یا کلمه ها رو میده.
وقتی این عملیات رو انجام بدیم موقع خوندن اون کلمه از دیتابیس دیگه مشکلی بوجود نمیاد.

من فکر میکنم الان مشکل شما اینه اگهبه طور مثال آدرس زیر را داشته باشیم:
کد:
localhost/ci3/محصول
کلمه محصول encode شده و در زمانی که به اون بخواهیم دسترسی داشته باشیم چون اینکد شده به این شکل نمایش داده میشه:
%D9%85%D8%AD%D8%B5%D9%88%D9%84
شما می تونید اون رو دیکد کنید به سادگی با تابع urldecode و استفاده کنید.

البته همینطور که گفتم بهترین راه اینه که اول لینک آدرس ها رو خودمون یه سری عملیات روشون انجام بدیم و در زمان خوندن دیگه مشکلی نداشته باشیم.
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
 سپاس شده توسط HenryFep
#9
من توابع و کارایی که فرمودید رو از قبل انجام دادم.

مشکل من فکر کنم بخاطر محدودیت کاراکترهای فارسی در htaccess هست چون با کلمات عربی مشکلی نداره به فرض ادرس زیر :
کد:
localhost/ci3/توت
رو باز میکنه ولی در صورتی که بعضی حروف مثل ص یا پ یا... باشه باز نمیکنه !!!

من ادرسها رو بدون انکد در دیتابیس ذخیره میکنم. و موقع بررسی آدرس برای نمایش هم اون با تابع urldecode دیکد میکنم!.

مشکل رو پیدا کردم؛‌ همانطور که گفتم مشکل مربوط به htaccess بود!

با تغییر در فایل htaccess بصورت زیر مشکل حل شد!

کد:
RewriteRule ^([\s\S]*)$ index.php/$1 [L,B,QSA]
پاسخ
#10
من از کد زیر برای فایل .htaccess استفاده میکنم و تا حالا همچین مشکلی با حروف فارسی یا عربی نداشتم.

کد:
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>

پیشنهاد میکنم شما هم از این استفاده کنید و کلیه درخواست های آدرس رو در کنترلر مدیریت کنید.
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ


پرش به انجمن:


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