Проблем с кирилица и preg_replace

kriss

Registered
Имам една функция която замества всичко което не е букви или цифри с "-"
Проблемът е, че не "разпознава" някои букви на кирилица и се получава "маймуница:

функцията е това:
PHP:
	function toTitle($string){
		setlocale(LC_ALL, 'nl_BG');
		$newString = preg_replace('/[^a-zа-я\p{Cyrillic}0-9]/i', '-', $string);
		return $newString;
	}
използвам я така:
PHP:
<?php echo toTitle("Примерно заглавие 1"); ?>
трябва да изведе:
Примерно-заглавие-1
а тя извежда:
П�-име�-но-заглавие-1
пп: когато патерна е:
'/[^a-zа-ярстуфхцчшщъью\p{Cyrillic}0-9]/i'
работи без проблем, но има ли по-кратко решение, и защо се получава така? :idea:
 
Не съм сигурен, но мисля, че когато се пише а-яА-Я, не взема всички букви от а до я.. Аз до сега колкото пъти съм правил нещо и ми е трябвало да използвам кирилица направо си пиша да позволява всички знаци.. Тея от PHP си правят майтап с България нещо.. :D
 
PHP:
<?php
header("Content-Type: text/html; charset=UTF-8");
function toTitle($string){
	setlocale(LC_ALL, 'nl_BG');
	$newString = preg_replace('/[^\S]/is', '-', $string);
	
	return $newString;
}

//Извежда: Примерно-заглавие-1
echo toTitle("Примерно заглавие 1");

Това не ти ли върши работа? Ако не ти върши цялостно работа, дай и други примери, поради които може да не бачка.


Ето го с твоя вариант...

PHP:
<?php
header("Content-Type: text/html; charset=UTF-8");
function toTitle($string){
	setlocale(LC_ALL, 'nl_BG');
	$newString = preg_replace('/[^a-zа-я\p{Cyrillic}0-9]/u', '-', $string);
	
	return $newString;
}

//Извежда: Примерно-заглавие-1
echo toTitle("Примерно заглавие 1");

Просто промени модификатора на u(задължително малко)


И трети вариант

PHP:
<?php
header("Content-Type: text/html; charset=UTF-8");
function toTitle($string){
	setlocale(LC_ALL, 'nl_BG');
	$newString = preg_replace('/[^a-zа-я0-9]/iu', '-', $string);
	
	return $newString;
}

//Извежда: Примерно-заглавие-1
echo toTitle("Примерно заглавие 1");
 
relax4o каза:
PHP:
<?php
header("Content-Type: text/html; charset=UTF-8");
function toTitle($string){
	setlocale(LC_ALL, 'nl_BG');
	$newString = preg_replace('/[^\S]/is', '-', $string);
	
	return $newString;
}

//Извежда: Примерно-заглавие-1
echo toTitle("Примерно заглавие 1");

Това не ти ли върши работа? Ако не ти върши цялостно работа, дай и други примери, поради които може да не бачка.


Ето го с твоя вариант...

PHP:
<?php
header("Content-Type: text/html; charset=UTF-8");
function toTitle($string){
	setlocale(LC_ALL, 'nl_BG');
	$newString = preg_replace('/[^a-zа-я\p{Cyrillic}0-9]/u', '-', $string);
	
	return $newString;
}

//Извежда: Примерно-заглавие-1
echo toTitle("Примерно заглавие 1");

Просто промени модификатора на u(задължително малко)


И трети вариант

PHP:
<?php
header("Content-Type: text/html; charset=UTF-8");
function toTitle($string){
	setlocale(LC_ALL, 'nl_BG');
	$newString = preg_replace('/[^a-zа-я0-9]/iu', '-', $string);
	
	return $newString;
}

//Извежда: Примерно-заглавие-1
echo toTitle("Примерно заглавие 1");
+1
 

Back
Горе