با سلام و وقت بخیر
می خوام تمام درخواست های که به دیتابیس ارسال میشه، اول حروف فارسی با حروف عربی (مثل ي => ی) جایگزین بشه.
لطفا رانمایی بفرمایید
ممنون ولی برای خود لاراول می خوام، چون پروژه بزرگ هست، نمی خوایم کار های این شکلی رو سمت کاربر انجام بدیم.
@AmirArdakani
میتونید از فانکشن زیر بصورت لوکال یا گلوبال استفاده کنید:
function persianToArabic($string)
{
$persian = ['ی'];
$arabic = ['ي'];
return str_replace($persian,$arabic,$string);
}
function convertArabicStringToPersian($string)
{
$arabic = array('ي', 'ك', 'ة');
$farsi = array('ی', 'ک', 'ه');
return str_replace($arabic, $farsi, $string);
}
function toPersianDigit($string)
{
$en_num = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$fa_num = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
return str_replace($en_num, $fa_num, $string);
}
function toEnglishDigit($string)
{
$en_num = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$fa_num = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
return str_replace($fa_num, $en_num, $string);
}
سلام
همچین مشکلی رو داشتم راه حل آماده ایی پیدا نکردم پس یکی براش ساختم.
EDIT
برای جلوگیری از ورود دوستان راه حل دادن.
برای جایگذاری داخل دیتابیس mysql بدردتون میخوره
یا راهی خواهم یافت یا راهی خواهم ساخت
:)
Laravel : 8
PHP : 7.4
web.php
:
Route::get('rebuild', [RebuildDatabaseController::class, 'getTables']);
Code :
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class RebuildDatabaseController extends Controller
{
public function getTables()
{
# DB Name
$databaseName = DB::connection()->getDatabaseName();
# Tables
$tables = DB::select('SHOW TABLES');
try {
# u can remove it. just for show tables
echo '';
foreach($tables as $table)
{
$tableName = ($table->{'Tables_in_' . $databaseName});
$columns = Schema::getColumnListing($tableName);
echo $tableName .' '. '[' . "\n";
foreach ($columns as $column) {
echo "\t" . $column . "\n";
DB::select("update $tableName set $tableName.$column=REPLACE($tableName.$column,'ي',N'ی')");
DB::select("update $tableName set $tableName.$column=REPLACE($tableName.$column,'ك',N'ک')");
DB::select("update $tableName set $tableName.$column=REPLACE($tableName.$column,'ة',N'ه')");
}
echo ']' . "\n";
}
return response(['status' => true]);
} catch (\PDOException $exception){
return response([
'status' => false,
# remove this lines after release
'line' => $exception->getLine(),
'file' => $exception->getFile(),
'msg' => $exception->getMessage(),
]);
}
}
}
من معمولا از یک global helper funciton به شکل زیر استفاده میکنم:
function to_fa_letter($string) {
$arabic_letters = ['ي', 'ك', 'ؤ', 'ۀ'];
$persian_letters = ['ی', 'ک', 'و', 'ه'];
return str_replace($arabic_letters, $persian_letters, $string);
}
و بعد مثلا موقع ذخیره و آپدیت یک فیلد در دیتابیس به این شکل ازش استفاده میکنم:
$user->name = to_fa_letter($request->name);
$user->save();
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟