Problema str_replace MySql e caratteri accentati

vimana

Nuovo Utente
6 Feb 2013
2
0
0
Salve a tutti,
sono nuovo e non molto esperto.
Sto passando da Xoops a Wordpress
Sto convertendo i dati e le vecchie tabelle in modo da essere compatibili con quelle wordpress.
Nella tabella wp_post c'è un campo post_name che con il vecchio CMS non avevo.
Il campo post_name non è alto che il titolo semplificato da usare con url rewriting. In pratica se il post ha il titolo "Ecco come farò a ..." il campo post name deve essere qualcosa tipo "ecco-come-faro-a".

Ho fatto una funzioncina per convertire il post_tite in post_name. La funzione è la seguente.

PHP:
<?php

function generaTitoloSanato($titolo='') {
	   
	$titolo = strtolower($titolo);
	
	$zio = array(
	'Ì',
	'Í',
	'ß',
	'ö',
	'Ö',
	' ', 
	'(', 
	')', 
	'%', 
	'+', 
	'&', 
	'.', 
	',', 
	':', 
	'/', 
	'?', 
	'’', 
	'"', 
	'“', 
	'”', 
	'–', 
	'À', 
	'È', 
	'É', 
	'Ù', 
	'Ú', 
	"'", 
	'"',
	'ì',
	'í',
	'è',
	'é',
	'à',
	'ù',
	"'",
	'"',
	'!',
	'#039;',
	'&amp;',
	'Ä',
	'ä',
	'ü',
	'Ü',
	'ò',
	'ó',
	'Ò',
	'Ó',
	'Á',
	'á');

	$ziosanato = array(
	'i',
	'i',
	'ss',
	'oe',
	'oe',
	'-', 
	'', 
	'', 
	'-', 
	'', 
	'e', 
	'', 
	'-', 
	'-', 
	'-', 
	'-', 
	'-', 
	'', 
	'', 
	'', 
	'-', 
	'a', 
	'e', 
	'e', 
	'u', 
	'u', 
	'-', 
	'',
	'i',
	'i',
	'e',
	'e',
	'a',
	'u',
	"",
	'',
	'',
	'-',
	'e',
	'a',
	'a',
	'u',
	'u',
	'o',
	'o',
	'o',
	'o',
	'a',
	'a');
	
	$titolo = str_replace($zio,$ziosanato,$titolo);
	$titolo = preg_replace('/[^a-zA-Z0-9_ \-()\/%-&]/s', '', $titolo);
	$ogre = array('----','---','--');
	$akuma = array('-','-','-');
	$titolo = str_replace($ogre,$akuma,$titolo);
   	$titolo = preg_replace('/-$/', '', $titolo);
	    if (sizeof($titolo) > 0)
	    {
	        return $titolo;
	    }
	    else
	        return '';
	}

?>


Sembra funzionare bene se la uso con dati che non vengono da MySql.

esempio se scrivo
PHP:
$ciccio = 'I segreti del caffè corretto'
echo  generaTitoloSanato($ciccio)
viene
'i-segreti-del-caffe-corretto'

Invece ho un problema quando ho i dati che vengono da MySql e specificatamente con str_replace ma solo nei caratteri accentati.

Per compilare il campo quando è vuoto nella tabella wp_post ho fatto così:

PHP:
$username = "username";
$password = "password";
$hostname = "localhost"; 

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
 or die("Impossibile Connettersi a MySql");
echo "Connesso a MySQL<br>";

//select a database to work with
$selected = mysql_select_db("nomedatabase",$dbhandle)
  or die("Non riesco a trovare il DB");
  echo "Connesso al DB<br>";

$oldRows = mysql_query("SELECT * FROM  wp_posts WHERE post_name = ''");
while($row = mysql_Fetch_array($oldRows))
{
 $host = generaTitoloSanato($row['post_title']);
 mysql_query("UPDATE wp_posts SET post_name='$host' WHERE ID='{$row['ID']}'");}
 
//close the connection
  echo "Fatto<br>";
mysql_close($dbhandle);

Funziona tutto ma per esempio quando ho i caratteri accentati nel titolo esempio: 'I segreti del caffè corretto' diventa 'i-segreti-del-caff-corretto'
e mi tronca tutti i caratteri speciali. Ho provato a togliere $titolo = preg_replace('/[^a-zA-Z0-9_ \-()\/%-&]/s', '', $titolo); dalla funzione ed ho visto che i caratteri accentati non sono sostituiti dallo str_replace (mentre ad esempio lo spazio vuoto e altri caratteri si). Non capisco come mai se uso invece la fuzione con dati che non arrivano da MySql fuziona benissimo.

Qualcuno sa aiutarmi...
 

vimana

Nuovo Utente
6 Feb 2013
2
0
0
Ho risolto usando:
utf8_encode sui dati che arrivano da MySql
cambiando:

PHP:
$host = generaTitoloSanato($row['post_title']);
in
PHP:
$host = generaTitoloSanato(utf8_encode($row['post_title']))
 
Discussioni simili
Autore Titolo Forum Risposte Data
I Sto progettando nuovi siti utilizzando bootstrap e devo dire funziona bene, l'unico problema e la maschera -moz- HTML e CSS 0
K Problema form update PHP 2
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
S Problema nel ciclare un json Javascript 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
K Problema Inner join PHP 1
F firefox problema http Linux e Software 0
N Problema con position absolute e overflow HTML e CSS 4
E Problema jquery Success jQuery 2
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
E problema selezione sfumata Photoshop 2
K [PHP] Problema con variabili concatenate. PHP 1
A Problema filtro fluidifica Photoshop Photoshop 1
H Problema Bordi Scontorno Photoshop 1
O problema con query PHP 4
R Problema installazione Realtek WiFi USB rtl8821 Reti LAN e Wireless 0
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
Y Problema percorso file in rete PHP 1
N Problema SEO "L'URL non si trova su Google" SEO e Posizionamento 4
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
P Problema acquisizione clienti Webdesign e Grafica 1
F NetBeans problema creazione progetto Java Windows e Software 0
M Problema con Try Catch PHP 0
C problema seo + cerco esperto SEO e Posizionamento 11
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
A Problema, non so, di scale() o transform, oppure altro? HTML e CSS 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
I PROBLEMA: Sostituzione sito XAMPP E-Commerce 0
T problema data 30/11/-1 PHP 0
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Y Problema incolonnamento tabella PHP 7
S problema salvataggio immagini Photoshop 0
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
D problema php mysql PHP 1
D problema php mysql PHP 1

Discussioni simili