PDA

View Full Version : مشکل متد url_title با زبان فارسی



pitook
جمعه 10 آذر 1391, 13:22 عصر
سلام
میدونید که کار این متد url_title اینه که یک رشته رو میگره (مثلا عنوان خبر) و بجای space هاش (اگه داشته باشه)
دش - میزاره و 3 تا آرگومان داره که .....


$title = "What's wrong with CSS?";

$url_title = url_title($title);

// Produces: Whats-wrong-with-CSS

مشکل اینجاس که وقتی این رشته رو فارسی وارد این متد میکنم یه این صورت در میاد

95813



لطفا راهنمایی کنید :قلب:

plague
شنبه 11 آذر 1391, 11:27 صبح
من نمیدونم مشکل از اینیه که من میگم یا نه ! ولی کلا کاراکتر های فارسی به صورت دیفالت پیشتیبانی نمیشن توی url

تو فایل
config.php

این خط رو جایگزین کن


//$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
$config['permitted_uri_chars'] = 'a-z 0-9~%.+:_\- ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی';
بعد تست کن

pitook
یک شنبه 12 آذر 1391, 22:31 عصر
من نمیدونم مشکل از اینیه که من میگم یا نه ! ولی کلا کاراکتر های فارسی به صورت دیفالت پیشتیبانی نمیشن توی url

تو فایل
config.php

این خط رو جایگزین کن


//$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
$config['permitted_uri_chars'] = 'a-z 0-9~%.+:_\- ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی';
بعد تست کن

ممنون ولی برای استفاده کردن از این متد دو تا کار دیگه باید بکنیم

1.توی فایل url_helper.php که این متد وجود داره کاراکتر های فارسی رو اضافه کنیم



function url_title($str, $separator = '-', $lowercase = FALSE)
{
if ($separator == 'dash')
{
$separator = '-';
}
else if ($separator == 'underscore')
{
$separator = '_';
}

$q_separator = preg_quote($separator);

$trans = array(
'&.+?;' => '',
'[^a-z0-9آابپتثجچحخدذرزژسشصضطظعغف کگلمنوهیيئ‌۱۲۳۴۵۶۷۸۹۰\-\._]' => ' ',
//اضافه کردن کاراکتر های فارسی به این قسمت
'\s+' => $separator,
'('.$q_separator.')+' => $separator
);

$str = strip_tags($str);

foreach ($trans as $key => $val)
{
$str = preg_replace("#".$key."#i", $val, $str);
}

if ($lowercase === TRUE)
{
$str = strtolower($str);
}

return trim($str, $separator);
}


2.سومین آرگومان این متد ( که برای کوچیک کردن حروف لاتین استفاده میشه strtolower() )که به صورت پیش فرض FALSE است , اگر TRUE کنیم و رشته فارسی بهش بدیم مثل عکس زیر بهمون خروجی میده

95934

پس همون FALSE باید تعریف کنیم .

hidensoft
شنبه 09 دی 1391, 01:29 صبح
اصولا regx برای فارسی جواب نمی ده :)

codedme
یک شنبه 13 اسفند 1391, 01:38 صبح
اصولا regx برای فارسی جواب نمی ده :)

جواب میده باید به جای کاراکتر ها شماره کاراکتر ها رو بزنید