My database contains Arabic text with diacritics/tashkeel. To search user types without diacritics/tashkeel and I can successfully search using full-text search statements but unable to highlight the search term using regular expressions:
$str="اِنَّ الَّذِیۡنَ اٰمَنُوۡا وَ عَمِلُوا الصّٰلِحٰتِ وَ اَخۡبَتُوۡۤا اِلٰی رَبِّہِمۡ ۙ اُولٰٓئِکَ اَصۡحٰبُ الۡجَنَّۃِ ۚ ہُمۡ فِیۡہَا خٰلِدُوۡنَ";
$ptr="عملوا";
$result = preg_replace("/$ptr/", '<span style="background:yellow">' . $ptr . '</span>', $str);
echo $result;
Any ideas on how to resolve this?
Advertisement
Answer
Your string has extra character like tashkil. but character you want to match have no tashkil so solution is replace extra char and make both strings similar.
<?php
function stripDiacritics($str) {
$diacritic = array("ِ" ,"ٰ" ,"ّ" ,"ۡ" ,"ٖ" ,"ٗ" ,"ؘ" ,"ؙ" ,"ؚ" ,"ٍ" ,"َ" ,"ُ", "ٓ" ,"ْ" , "ٌ" , "ٍ", "ً", "ّ", "ۤ");
$str = str_replace($diacritic, '', $str);
return $str;
}
$str="اِنَّ الَّذِیۡنَ اٰمَنُوۡا وَ عَمِلُوا الصّٰلِحٰتِ وَ اَخۡبَتُوۡۤا اِلٰی رَبِّہِمۡ ۙ اُولٰٓئِکَ اَصۡحٰبُ الۡجَنَّۃِ ۚ ہُمۡ فِیۡہَا خٰلِدُوۡنَ";
$words = explode(" ",$str);
$resultText='';
foreach ($words as $word) {
$strippedWord = stripDiacritics($word);
$ptr="عملوا";
if ($strippedWord == $ptr) {
$resultText .= ' <span style="background:yellow">'.$word.'</span>';
}
else {
$resultText .= ' '.$word;
}
}
echo $resultText;
