Функция, подобна на str_replace()?

sizif

Registered
Здравейте!

Сещате ли се за функция, с действие подобно на str_replace(), която да разпознава големи и малки букви?

Имам текст, в който трябва да сложа линкове на определени думи, прекарвам го през серия от str_replace() -проверки, но ако търсената дума е с главна буква, а потребителят я въведе с малка, няма съвпадение и не слага линк...

Особеното е, че имам и кирилица в текста, т.е. функцията трябва да се справя и с това.

ПП: не става дума за търсачка, eregi() не ми помага...

Благодаря предварително!
 
Минаваш текста през тази функция http://bg2.php.net/manual/en/function.strtolower.php
и правиш всички букви малки.

После проверяваш с str_replace() и минаваш текста през тази функция за да стане нормален http://bg2.php.net/manual/en/function.ucfirst.php .
 
config.php
Код:
<?php
$server = "localhost";
$dbusername = "root";
$dbpassword = "";
$db_name = "db_name";
?>
function.php
Код:
<?php
function dumi_zam($text)
	{
	global $server,$dbusername,$dbpassword,$db_name;
		$connection = mysql_connect($server, $dbusername, $dbpassword);
		@mysql_select_db($db_name,$connection) or die( mysql_error() . __FILE__ . __LINE__ );
		$sql = mysql_query("SELECT * FROM dumi_zam") or die( mysql_error() . __FILE__ . __LINE__ );
			while( $rowset = mysql_fetch_array( $sql ) )
			{
			$text = preg_replace("/".$rowset['code']."/","<a href=\"".$rowset['url']."\" >".$rowset['code']."</a>", $text);
			}
		return $text;
	}
	?>
test.php
Код:
<?php
include "function.php";
include "config.php";

$tekst="the edno vreme imalo gogo mnogo razlichni the raboti";


echo dumi_zam($tekst);

?>
sql.sql

Код:
CREATE TABLE `dumi_zam` ( 
`id` int(10) NOT NULL auto_increment, 
`code` varchar(255) default NULL,
`url` varchar(255) default NULL,
PRIMARY KEY (`id`) 
);

ето нещо подобно което съм правил, но не е с линк :-)

http://webjo-bg.info/ci76/old/1234/111.php


Код:
<?php
function dumi_zam($text)
	{
	global $server,$dbusername,$dbpassword,$db_name;
		$connection = mysql_connect($server, $dbusername, $dbpassword);
		@mysql_select_db($db_name,$connection) or die( mysql_error() . __FILE__ . __LINE__ );
		$sql = mysql_query("SELECT * FROM dumi_zam") or die( mysql_error() . __FILE__ . __LINE__ );
			while( $rowset = mysql_fetch_array( $sql ) )
			{
			$text = preg_replace("/".$rowset['code']."/","<a href=\"#\" onmouseover=\"return overlib('". $rowset['text'] . "', CAPTION, '" . $rowset['code'] ."');\" onmouseout=\"return nd();\">".$rowset['code']."</a>", $text);
			}
		return $text;
	}
	?>

ето за балона :-)
 
Здравейте!

Пиша по реда на функциите, к пробвах, а не по реда на постъпване на идеите:

mute, str_ireplace(); беше идеалния вариант... ако работеше с кирлица. Невероятно ефективна е с латиницата, но кирилицата я пропуска.

Същото се отнася и за strtolower();, к предложи deam0n.
Опитах дори под кодировка utf8, но кирилицата явно е твърде екзотична за нея... С лат. разбира се, проблем няма...

jooorooo, благодаря за кода, но preg_replace(); не върши работа. Съображенията ми уви са същите, както за другите 2 функции.
Пробвах с нея още снощи и не е подходяща. Дори и да работи на лат, на кирилица прави разлика м/у главни и малки букви и не заменя думите, ако не са огледални, а при мен повечето думи ще са на кирилица...

Остават вариантите с масив и подмяна на главните букви с малки (видях, че и чехите решават проблема по този начин), но дори и за рейтинга на гугъл не съм склонен да го правя :)

Ще се примиря с това, че някои от думите ще минават през ситото...

Благодаря на всички ви, че се отзовахте по темата!
 
ами..щом не става по никой начин прави 2 масива с големи и малки букви и ги заменяй т.е. имаш 3 реда код..
$up = range('А','Я');
$down = range('а','я');
$text = str_replace($up,$down,$text);

и след това си прави каквото искаш с низа
 
Здравей, bafitu!

Сетих се за този вариант, но е излишно товарене на сървъра. Това са +30 операции в едната посока + още 30, за да ги върна обратно след поставянето на таговете + още няколко операции, за да оправя главните букви в началото на изречението (имам смътна идея за решение, просто не ми е належащо, за да го мисля)...

При други обстоятелства - да, но в моя случай слагам връзките динамично и не са един-два текста, които потребителят я зареди - я не, а доста повече, при това очаквам здрав рефреш (е, поне си го пожелавам ;) ), за да прежаля натоварването с лека ръка. Ще е голямо ровене...

Целта на връзките е гугъл. Потребителите ги боли шалтера за 25-30 ключови думи, които им разхвърлям из всички текстове...
Ако някоя от вградените функции вършеше работа с кирилицата, щеше да е идеално, но да усложнявам скрипта, за да компенсирам недостатъците на РНР, не си струва...

Губя тези думи, к потребителят изпише с главна буква, но остават тези с малка. Засега няма да се изсилвам.

Благодаря, че се включваш! :)
 
preg_replace("/".$rowset['code']."/i","<a href=\"".$rowset['url']."\" >".$rowset['code']."</a>", $text);
а така пробвали ?
 
Здравей, mute!

Не не съм пробвал директно с резултата от БД. Правих пробите с обикновен масив. Това i, к си отбелязал в червено с каква цел е?
Ще опитам по-късно, макар да не съм оптимист...
Благодаря, че следиш темата!
 
mute, златен си!

Въпросното i решава проблема!
Благодаря + 1т!

Благодаря и на всички, к следихте темата!

ПП: на шибания хост не ще :(
На локалния сървър се получава, на работния също, но на хоста, на който ще качвам сайта - не. Кодировката там е utf8 докато на файла е cp1251. Ще пробвам да го кодирам и декодирам...
Не става.
Оставям го по-стария начин, но още веднъж благодаря! Занапред ще го имам предвид!
 
защо още ги караш на тези цп1251 , даваи всичко в утф8, БД , фаилове, така няма да имаш проблеми, направо се преоткрих като почнах да ползвам utf8
 

Back
Горе