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:
JavaScript
x
$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.
JavaScript
<?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;