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

ببینید من توی آدرس بار میام مثلا آدرس رو به صورت

http://www.cms17.dev/administrator/news/...ن-خبر-تستی

وارد میکنم و مشکلی ندارم اسلاگ رو میگیره با مقادیر داخل بانک مقایسه میکنه و نمایش میده اما اگه یه سری کلمات و حروف خاص رو مثلا

http://www.cms17.dev/administrator/news/viewpost/آمد

وارد کنم با خطای 

Object not found!

The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.

مواجه میشم اگه امکانش هست راهنمایی کنین.
ممنون از همگی
پاسخ
#2
برای منم همچین مواردی پیش اومده.

چندین عامل علتش هستند.

یکی از عوامل استفاده از تابع strtolower هست که اگر رشته فارسی رو بهش بدید بعضی از کلمات فارسی رو تغییر میده ! پس اگر از این تابع استفاده کردید اونو حذفش کنید.

حتما قبل از اینکه عبارت رو برای بررسی وجود در دیتابیس به کوئری ارسال کنید اونو با تابع url_decode دیکد کنید.

و ...
پاسخ
 سپاس شده توسط admin
#3
همینطور که فرهاد گفت احتمالا مشکل از دیکد شدن URL باشه و اگه از url_decode استفاده کنی احتمالا مشکل حل میشه یا اینکه از تابع strtolower یه جا داری استفاده میکنی.

به نظرم بیا ببین داخل دیتابیس چطوری ذخیره شده بعد اون رو با مقداری که از برنامه ت میگیری مقایسه کن متوجه میشی مشکل از کجا ناشی میشه
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
#4
بابا دمتون گرممممممم تو برنامنویس گذاشتم هنوز کسی جواب نداده شما جواب دادین :| دمتون گرم واقعا

ببینید تو دیتا بیس خود عنوان رو که تبدیل کردم رو میاره نمایش میده با این

کد:
function make_slug($slug){
   return str_replace(' ', '-', trim($slug));
}

مثلا اگه عنوان باشه "عنوان خبر تستی" میاد اینجوری ذخیره میکنه "عنوان-خبر-تستی" جالب اینه که این کاملا درسته و نمایش میده داخل صفحه با متد پایین و اگه مثلا پارامتری که توی مرورگر میزنم بزنم "استاد-آمد" فقط به خاطر "مد" که توی اسلاگ هست اون خطا رو میده نمیدونم چه مرگشه :|


کد php:
<?php
defined
('BASEPATH') OR exit('No direct script access allowed');

class 
News extends Admin_Controller{

 
   public function __construct()
 
   {
 
       parent::__construct();
 
   }

 
   public function viewpost($slug null){
 
       $getpost $slug;

 
       $this->load->model('news_model''news');
 
       $get_news $this->news->getOne(array('slug' => urldecode($getpost)));

 
       if(!empty($get_news)){
 
           foreach ($get_news as $news => $value){
 
               if($news == 'slug'){
 
                   echo $value ' <br/><br/><br/>';
 
                   echo urldecode($value) . ' <br/><br/><br/>';
 
               }else {
 
                   echo $value ' <br/><br/><br/>';
 
               }
 
           }
 
       }


 
       echo urldecode($getpost);
 
   

اگه میتونین یه راه نمایی بکنین دمتون گرم گیر افتادم شدیدا
پاسخ
#5
ساده ترین راه اینه خروجی کلمه مورد نظرت رو توی کنترلر چاپ کن
بعد با مقداری که اون slug توی دیتابیس ذخیره شده مقایسه کن. در واقع بیا جفتش رو کپی کن توی یه ادیتور با هم مقایسه شون کن.

من این مشکل رو چندین بار داشتم. یه بار به علت ذخیره شدن حروف به صورت strtolower بود و یه بار مثلا فیلد slug توی دیتابیس سایزش کوچیک بود و تعداد کاراکترهای محدودی داخلش ذخیره شده بود.
خلاصه اینکه دو تا متن رو با هم مقایسه کن متوجه میشی مشکل از کجاست
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
#6
نه میثم جان مشکل اصلا از کد من یا کدایگنایتر نیست
این چیزا رو هم انجام دادم و درسته حرفت
روی هاست هم مشکلی ندارم قشنگ کار میکنه ولی توی لوکال هاست این مشکل رو دارم
مشکل که از آپاچی هست انگار ولی نمیدونم چجوری روی لوکال برطرفش کنم

------------------------------

حل شد فقط متذکر بشم مجدد که روی هاست مشکل نداشت
کدایگنایتر عالی هست برای پروژه های کوچیک و متوسط

برای حل این مشکل اگه مشکلی شبیه من رو داشتید موقتا این کد زیر رو توی htaccess بریزید.

کد:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

ممنون از همه و موفق باشید
پاسخ
#7
htaccess پیشنهادی من برای کد ایگنایتر اینه که کاملا تست شده و با همه زبان ها هم سازگاره:
کد:
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
#8
(2017/04/22، 01:22 PM)admin نوشته است: htaccess پیشنهادی من برای کد ایگنایتر اینه که کاملا تست شده و با همه زبان ها هم سازگاره:
کد:
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

این مشکل من رو حل نکرد
ببین اون کدی که فرستادم واسه مشکل توی xampp هست که بعضی حروف فارسی رو not found میده.
پاسخ
#9
(2017/04/23، 06:31 AM)persianuser نوشته است:
(2017/04/22، 01:22 PM)admin نوشته است: htaccess پیشنهادی من برای کد ایگنایتر اینه که کاملا تست شده و با همه زبان ها هم سازگاره:
کد:
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

این مشکل من رو حل نکرد
ببین اون کدی که فرستادم واسه مشکل توی xampp هست که بعضی حروف فارسی رو not found میده.

مشکل از xampp یا این کد htaccess نیست. اگه از کد ایگنایتر 3 استفاده می کنید این موردی که به شما گفتم کدیه که خود کدایگنایتر قرارش داده. این صفحه رو ببینید:
کد:
https://www.codeigniter.com/userguide3/general/urls.html

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


پرش به انجمن:


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